数据分布对MySQL执行计划的影响
来源:互联网 发布:注销阿里云账户 编辑:程序博客网 时间:2024/04/29 11:33
以前我一直以为,MySQL优化器只会根据数据的基数来判断执行计划的优化,在5.0时,基本上只要基数达不到要求,MySQL就不会选择索引。不过从今天优化一组SQL的情况来看,5.1早已不是这样,MySQL优化器考虑了数据分布的影响,使用不同的值,对同一条SQL可能产生完全不同的执行计划。可以做如下测试。
有一张表 A (id,c1),假设采用“SELECT c1,count(*) FROM table GROUP BY c1”的方式来查看每一列每个值的数据量的结果如下:
c1count(*)1100210003100004100000假设现在c1上有个索引 idx_1 (c1)。
当我采用只有100个值的1作为条件的筛选值查看执行计划时,
MySQL会毫不犹豫的走 idx_1 索引。
但是改为4作为筛选值,基本上都可以看到全表扫描的执行计划。
EXPLAIN SELECT * FROM A WHERE c1=1;EXPLAIN SELECT * FROM A WHERE c1=4;
虽然从源码目录的 sql/sql_select.cc 中并未找到具体的优化代码,但是从sql/opt_range.cc来看,至少RANGE查询的优化已经通过蒙特卡罗方法来估算要选择的值的出现概率,那么有理由相信,如此简单的选择查询,MYSQL肯定也估算了要查询的值出现的概率,然后以此为依据计算访问路径。
所以,一条SQL优化时,不仅要看数据的离散度,还得看经常被当作筛选值的数值唯一性是否够好,如果被筛选的值唯一性不好,建立索引依然是没有什么意义的,因为MySQL根本不会选择这个索引。
- 数据分布对MySQL执行计划的影响
- 数据分布对访问方式的影响
- 有关成本统计数据新旧对执行计划的影响
- ORACLE10g柱状图信息对执行计划的影响
- Oracle中CLUSTER_FACTOR对SQL执行计划的影响
- 多维高斯分布协方差矩阵对数据分布的影响
- 应用程序对Sqlserver进行SQL查询使用与不使用参数对执行计划的影响
- Oracle 对表设置并行度对执行计划的影响
- mysql查询超时对PHP执行的影响
- Precision和Length对MySQL执行结果的影响
- mysql的执行计划
- mysql的执行计划
- MySQL的执行计划
- sql优化(查询条件的变化对执行计划的影响)
- toad 分析执行计划产生的影响
- 隐式转换在执行计划中对Access predicates 和Filter predicates 的影响
- 从Peeked Binds看DDL和DCL语句对执行计划的影响
- 测试6——观察Optimizer_index_cost_adj 对执行计划的影响
- js随记----对下拉列的操作(取下拉列共包含几项、所选的项的索引、所选的项的value和text值
- flex编写的一个相册浏览
- 读《 21天学通ARM嵌入式开发(第2版)》后感
- 笔记本电池是开机充电还是关机充电
- sync问题导致shell脚本执行失败
- 数据分布对MySQL执行计划的影响
- 遗漏任务
- MySQL INNER JOIN算法的效率分析
- Connection Statement ResultSet
- MySQL LEFT/RIGHT JOIN算法效率分析
- Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
- 雷锋微视点:1019微博精选
- RMAN备份与恢复(6)——基于时间的不完全恢复!
- buddy系统算法