不使用索引的查询

尽管创建了索引,但是由于不适当的查询条件,往往会导致索引失效。[@more@]

SQL>CREATE TABLE tTest(
id1 char(10) NOT NULL,
id2 char(10) NOT NULL,
id3 char(10) NOT NULL,
name varchar2(100),
value number(8)
);
SQL>CREATE INDEX idx_tTest_1 ON tTest(
id1
);
SQL>CREATE INDEX idx_tTest_2 ON tTest(
name
);
SQL>CREATE INDEX idx_tTest_3 ON tTest(
value
);
SQL>CREATE INDEX idx_tTest_4 ON tTest (
id1,id2,id3
);

■ 索引列使用NOT比较时
 × select * from tTest where id1 <> '001';
 × select * from tTest where id1 not in ('001','002','003');

■ 索引列使用函数时,不使用索引
 × select * from tTest where substr(id1,1,1) = '1';

■ 索引列运算时,不使用索引
 ○ select * from tTest where value > 100;
 × select * from tTest where value - 50 > 100;

■ 索引列和NULL比较时,不使用索引
  索引中不存在NULL值,如果指定NULL值,则不使用索引
 × select * from tTest where name is null;
■ 索引列前方一致以外的模糊匹配(LIKE)
 ○ select * from tTest where id1 = '001%';
 × select * from tTest where id1 = '%001';
 × select * from tTest where id1 = '%00%';

■ ORDER BY语句如果不指定所有索引列,排序时不使用索引
  ORDER BY语句指定的排序列,如果包括所有索引列,并且索引列NOT NULL的时,使用索引排序。
○ select * from tTest order by id1,id2,id3;

■ 不从组合索引第一列开始作为查询条件时
  组合索引idx_tTest_4
 (1)id1
 (2)id2
 (3)id3

  上述复合索引列条件查询时,索引使用情况
 ○ select * from tTest where id1 = '001' and id2 = '001' and id3 = '001';
 ○ select * from tTest where id1 = '001' and id2 = '001';
 ○ select * from tTest where id1 = '001' and id3 = '001';
 ○ select * from tTest where id1 = '001';
 × select * from tTest where id2 = '001';
 × select * from tTest where id3 = '001';
 × select * from tTest where id2 = '001' and id1 = '001' and id3 = '001';

说明:

○ 使用索引 × 不使用索引

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/174388/viewspace-913702/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/174388/viewspace-913702/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值