05.09 用不上索引的SQL語句

下面介紹六種建立索引後不起作用的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 ‘%王’ ×


分享到:


相關文章: