日期:2014-05-17  浏览次数:20967 次

索引查询需要什么条件,下面答案是B
oracle数据库中表t_staff的staff_num字段上已经建立了索引,下面哪条语句能够正确的使用到该索引?B
A. select * from t_staff where staff_num <> 10000
B. select * from t_staff where staff_num + 2000 > 10000
C. select * from t_staff where staff_num is not null
D. select * from t_staff where to_char(staff_num) = '3145'

请各位高手解答下,(1)数据库建立索引需要什么条件?
  (2)建立完怎样查询索引,需要注意什么问题?
  (3)上面答案是B,为什么?

------解决方案--------------------
1. 不需要什么特殊的条件
2. 就一点“保持原汁原味”:不要在列上进行任何运算(如果确实有,那就建立函数索引),不要有“不等于”和is,不要进行类型转换。
------解决方案--------------------
A.违反了NOT原则,使用<>不走索引。
C.违反了NULL原则,有IS NULL或者IS NOT NULL不走索引。
D.尽量不在WHERE字句用函数,否则要建立函数索引。

可以参考http://wenku.baidu.com/view/363a9e2758fb770bf78a5572.html
------解决方案--------------------
1:建立索引原则
经常查询使用的列,并且性能慢的情况下建立索引,根据实际需求建立不同的索引,复合索引,单列索引,位图索引等

2:查询表上索引
非分区:select * from dba_indexes where 
分区:select * from dba_ind_partition where 
要注意索引是否有效,如果为INVLIDATE 的话,要重建索引

3:要理解这个就要深入理解索引的概念
一般来说,索引键值无法直接使用的话则基本上不能正确使用索引了