只为成功找方向,不为失败找借口

每天都不能停止前进的脚步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用不上索引的SQL语句

Posted on 2018-06-25 12:36  冰碟  阅读(990)  评论(0编辑  收藏  举报

下面介绍六种建立索引后不起作用的sql语句。

1、使用不等于操作符(<>, !=)

SELECT *

FROM dept

WHERE staff_num <> 1000; ×

 

SELECT *

FROM dept

WHERE staff_num < 1000

OR staff_num > 1000; √

 

2、使用 is null 或 is not null

任何包含null值的列都将不会被包含在索引中。

解决这个问题的办法就是:建表时把需要索引的列

定义为非空(not null)

 

3、索引列使用函数或计算

SELECT *

FROM fin_ipb_feeinfo

WHERE trunc(fee_date) > '2007-01-01'; ×

 

SELECT *

FROM fin_ipb_feeinfo

WHERE fee_date > to_date( '2007-01-01','yyyy-mm-dd'); √

 

WHERE sal*1.1>950 ×

 

WHERE sal>950/1.1 √

 

4、索引列与比较值数据类型不一致

 

emp_no: NUMBER型

 

WHERE emp_no=123(好) √

WHERE emp_no= '123'(也可)

 

emp_type:CHAR型

WHERE emp_type=123 (此时,查询时,不利用索引列) ×

 

WHERE emp_type='123‘ √

 

5、复合索引,必须使用主索引列

 

例:复合索引(deptno,job)

WHERE deptno=20 AND job=’MANAGER’ √

WHERE deptno=20 √

WHERE job=’MANAGER’ AND deptno=20 √

 

WHERE job=’MANAGER’ ×

6、like子句

 

WHERE name LIKE ‘王%’ √

WHERE name LIKE ‘%王%’ ×

WHERE name LIKE ‘%王’ ×