论坛首页 综合技术论坛

SQL语句索引不能使用的一些情况

浏览 3201 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-17   最后修改:2009-04-17
先不论索引是否被滥用,今天只谈虽然建立了索引,但不同的SQL语句写法,用不上的问题

看看下面这颗树,就知道索引用不了的原因了

               a
            ab  ad
         abc     adm
      abcd        admn


1. not 用不了索引
2. <> 用不了索引
3. 与null值比较用不了索引
4. like ,  select * from emp where ename like 'luo%' --能用上
           select * from emp where ename like '%dai' --不能
5. 查询字段使用了函数
   select * from emp where to_char(reg_date,'yyyy')='2009'
   当然,还包括了||连接符,对查询字段做运算等,如: where age+1=30

   解决办法,使用FBI(基于函数的索引)

6. 多个字段建立组合索引
  
   如对班号,姓名建立索引,并且班号在前
  where class_no='200105302'  and stu_name= '罗某'  --可以用索引
  where class_no='200105302'                        --可以
  where stu_name='罗某'                             --不可以
  原因和like类似

7. 注意数据类型隐式转换的问题
  如service_type字段,数据库表里varchar2类型,但是像下面这样写
  where service_type=82  --用不了,隐式类型转换
   发表时间:2009-05-11  
不错,很有价值的介绍。其中的隐式类型转换
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics