在sql中有很多陷阱會使一些索引無法使用。以下列出了一些常見的情況:
1.使用不等於操作符(<>, !=)
例:表customers,列cust_rating有乙個索引.
select cust_id,cust_name from customers where cust_rating<>'aa'; --這條sql將不會使用索引
select cust_id,cust_name from customers where cust_rating<'aa' or cust_rating>'aa'; --這條sql將會使用索引
2.使用is null或is not null
null值通常會限制索引,在建立表時對某一列指定not null或default,對於避免可能出現的效能問題很有幫助.
3.使用函式
如果不使用基於函式的索引,那麼在sql語句的where子句中對存在索引的列使用函式時,會使優化器忽略掉這些索引。
select empno,ename,deptno from emp where trunc(hiredate)=='01-may-81'; --這裡不會使用到索引
select empno,ename,deptno from emp where hiredate>='01-may-81' and hiredate<(to_date('01_may_81')+0.9999); --將使用索引查詢
4.比較不匹配的資料型別
select name from banks where access = 123456; -- 這裡會自動轉成varchar型別的再比較,而進行一次全表掃瞄
select name from banks where access ='123456'; --這樣就可以使用索引了
深度揭露Oracle索引使用中的限制
筆者認為對於資料庫索引的作用,應該分兩面看。除了肯定其對資料庫效能帶來的正面影響外,還需要認識到其可能帶來的負面影響。只有如此,資料庫管理員才能夠在正確的場合使用正確的索引。要知道有時候乙個錯誤的索引可能引發死鎖,並導致資料庫效能的急劇下降或程序終止 而如果資料庫管理員能夠做出乙個正確的判斷的話,那...
mysql 索引的限制
mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...
Mysql 索引長度限制
在設定 utf8mb4 欄位的字元長度時,可能會丟擲乙個異常 specified key was too long max key length is 1000 bytes 也就是在給表的索引字段新增字元長度時,超過了最大索引長度 1000 位元組。關於索引長度的限制,最主要的因素就是儲存引擎和字符...