下面介紹六種建立索引後不起作用的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 ‘%王’ ×
閱讀更多 老孔說編程 的文章