使用索引不一定能提高查询性能
2016-04-28 10:49
246 查看
索引列的选择性不高。
我们假设典型情况,有表emp,共有一百万行数据,但其中的emp.deptno列,数据只有4种不同的值,如10、20、30、40。虽然 emp数据行有很多,ORACLE缺省认定表中列的值是在所有数据行均匀分布的,也就是说每种deptno值各有25万数据行与之对应。假设SQL搜索条件DEPTNO=10,利用deptno列上的索引进行数据搜索效率,往往不比全表扫描的高,ORACLE理所当然对索引“视而不见”,认为该索引的选择性不高。
但我们考虑另一种情况,如果一百万数据行实际不是在4种deptno值间平均分配,其中有99万行对应着值10,5000行对应值 20,3000行对应值30,2000行对应值40。在这种数据分布图案中对除值为10外的其它deptno值搜索时,毫无疑问,如果索引能被应用,那么效率会高出很多。我们可以采用对该索引列进行单独分析,或用analyze语句对该列建立直方图,对该列搜集足够的统计数据,使ORACLE在搜索选择性较高的值能用上索引。
总结:
1.平均数据范围符合条件用索引比全表扫描差,因为选择性不高。
2.对符合条件数据量少的,使用索引效率会高出很多
我们假设典型情况,有表emp,共有一百万行数据,但其中的emp.deptno列,数据只有4种不同的值,如10、20、30、40。虽然 emp数据行有很多,ORACLE缺省认定表中列的值是在所有数据行均匀分布的,也就是说每种deptno值各有25万数据行与之对应。假设SQL搜索条件DEPTNO=10,利用deptno列上的索引进行数据搜索效率,往往不比全表扫描的高,ORACLE理所当然对索引“视而不见”,认为该索引的选择性不高。
但我们考虑另一种情况,如果一百万数据行实际不是在4种deptno值间平均分配,其中有99万行对应着值10,5000行对应值 20,3000行对应值30,2000行对应值40。在这种数据分布图案中对除值为10外的其它deptno值搜索时,毫无疑问,如果索引能被应用,那么效率会高出很多。我们可以采用对该索引列进行单独分析,或用analyze语句对该列建立直方图,对该列搜集足够的统计数据,使ORACLE在搜索选择性较高的值能用上索引。
总结:
1.平均数据范围符合条件用索引比全表扫描差,因为选择性不高。
2.对符合条件数据量少的,使用索引效率会高出很多
相关文章推荐
- 上机题-字符串反转
- angular.extend(dst, src)对象拓展
- mybatis3.2.0与mybatis3.3.0传参异常
- Java File类功能扩展
- Java后端WebSocket的Tomcat实现
- vs 调试技巧 1
- Wordpress图片显示模糊的问题
- php常见的几个魔术方法
- php第六讲
- 从架构漫谈九篇文章看软件体系结构
- chm文件打开空白无内容的解决办法
- 最短路
- 在ios系统中查看模拟器和真机中的沙盒目录
- Android源码编译之Nexus5真机编译
- HDU 5600 N bulbs
- 安装数据库注意要点
- SQLSever中的触发器基本语法与作用
- 打开MySQL的慢查询记录
- LinkedList与ArrayList的区别
- Android网络请求库okHttp进行post、get请求