现在的位置: 首页 > 综合 > 正文

range变量的效率问题

2012年07月10日 ⁄ 综合 ⁄ 共 669字 ⁄ 字号 评论关闭

这个是上次被要求优化代码,range变量只有一个值时,用具体值代替,当时心里还略不爽

range变量有啥不好的,多方便,心里一直念念不忘,于是自己写了个测试代码

发现确实点问题

Image(135)

据说原因是

使用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优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。

抱歉!评论已关闭.