range变量的效率问题
2013-04-19 21:02
190 查看
这个是上次被要求优化代码,range变量只有一个值时,用具体值代替,当时心里还略不爽
range变量有啥不好的,多方便,心里一直念念不忘,于是自己写了个测试代码
发现确实点问题
据说原因是
使用range变量
如果有索引的话 不会使用索引
印象中和oracle的技术特性有关
以前在学校写java的时候,数据库是mysql,使用in 某个范围做筛选条件,导致了性能的大幅下降,这个问题似乎有点类似啊
记得当时查到的解释是mysql使用in,不会使用索引
后来又发现一篇文章,range效率高于通配符,当是意外收获吧:
http://blog.sina.com.cn/s/blog_4d1570de0100s9tv.html
附关于Oracle统计的描述网上找来的:
这个要看oracle优化器自己选择是否要使用INDEX了。这个要取决于你表name列的数据唯一性和分布。分以下2种情况。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。
注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
range变量有啥不好的,多方便,心里一直念念不忘,于是自己写了个测试代码
发现确实点问题
据说原因是
使用range变量
如果有索引的话 不会使用索引
印象中和oracle的技术特性有关
以前在学校写java的时候,数据库是mysql,使用in 某个范围做筛选条件,导致了性能的大幅下降,这个问题似乎有点类似啊
记得当时查到的解释是mysql使用in,不会使用索引
后来又发现一篇文章,range效率高于通配符,当是意外收获吧:
http://blog.sina.com.cn/s/blog_4d1570de0100s9tv.html
附关于Oracle统计的描述网上找来的:
这个要看oracle优化器自己选择是否要使用INDEX了。这个要取决于你表name列的数据唯一性和分布。分以下2种情况。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。
注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
相关文章推荐
- linux上Kettle定时执行(转换的单步执行,job的单步执行,环境变量,kettle定时功能,效率问题等)转自(http://blog.csdn.net/feng19821209/article/details/5800960)
- [讨论] Excel Range写入大量数据的效率问题
- java基础 int变量自增 效率问题
- 关于Javascript循环体变量声明与初始化的效率问题
- axure中this/target.属性的执行效率低于局部变量.属性,解决后台刷新数据延时抖动问题
- 交换两个变量效率问题
- 关于Javascript循环体变量声明与初始化的效率问题
- 变量的存储位置和程序的效率问题
- The NOTE of learning ASP.NET [10] 关于.NET整型与浮点型变量使用上的效率和存储问题
- 交换两个变量效率问题
- 解决使用EclipseDebug进入到JDK源码无法查看运行时变量的问题
- 变量空间的问题
- 函数返回局部变量问题
- matlab运行出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题
- [python笔记]for循环中循环变量迭代问题
- crontab启动shell,环境变量问题
- 父类子类,变量覆盖的问题
- Delphi中创建类的实例与定义一个变量引出的问题
- 【简译】JavaScript闭包导致的闭合变量问题以及解决方法
- 主函数与中断函数共享变量问题