Oracle的WHERE语句中的索引的使用

时间:14-06-15 栏目:性能测试技术 作者:乐测网 评论:0 点击: 544 次

索引是表的一个概念部分 , 用来提高检索数据的效率, ORACLE 使用了一个复杂的自平衡 B-tree 结构 . 通常 , 通过索引查询数据比全表扫描要快 . 当 ORACLE找出执行查询和 Update 语句的最佳路径时 , ORACLE 优化器将使用索引。 
大部分的性能问题其实都是索引应用的问题,Where子句、Order By、Group By 都要用到索引。
一般开发人员认为将索引建全了就可以下班回家了,实则还有颇多的思量和陷阱。

索引列上不要使用IS NULL 或 IS NOT NULL

× SELECT Col FROM tbl WHERE col IS NULL

索引列上不要使用函数

× SELECT Col FROM tbl WHERE substr(name ,   1 ,   3 )  =  'ABC'
○ SELECT Col FROM tbl WHERE name LIKE 'ABC%'

WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.

索引列上不要使用NOT ( != 、 <> )

× SELECT Col FROM tbl WHERE col ! =   10
○ SELECT Col FROM tbl WHERE col >  10  OR col <  10

记住 , 索引只能告诉你什么存在于表中 , 而不能告诉你什么不存在于表中 . 要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描。

索引列上不要进行计算

× SELECT Col FROM tbl WHERE col /  10  >  10
○ SELECT Col FROM tbl WHERE col >  10  *  10

这是最最普遍的失效陷阱,比如where trunc(order_date)=trunc(sysdate), i+2>4。索引失效的原因也简单,索引是针对原值建的二叉树,你将列值*3/4+2折腾一番后,原来的二叉树当然就用不上了。

声明: 本文由( 乐测网 )原创编译,转载请保留链接: Oracle的WHERE语句中的索引的使用

Oracle的WHERE语句中的索引的使用:等您坐沙发呢!

发表评论(需填写下方的验证回答,无用户名的评论将视为匿名发表,您也可以登陆或注册后再发表评论)

您必须 [ 登录 ] 才能发表留言!

@关注乐测网

-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:

→点击这里打开手机平板访问说明←

    智能手机平板电脑访问方法

1.用手机浏览器输入本站网址http://www.test666.com就可直接访问
2.微信、QQ、微博或手机浏览器的二维码扫描功能扫描以下二维码图

标签云球