mysql - 索引最左前綴的解釋


在創建一個n列的索引時,遵循“最左前綴”原則

假設有如下表: create table AAA (a varchar2(32) ,b varchar2(32),c date);

在a和c列上建普通索引: create index iN_AAA_1 on AAA (a, c);
1.索引左前綴性的第一層意思:必須用到索引的第一個字段。select * from AAA where b=:xxx and c=sysdate;則不會用到索引,因為必須有a出現在where 語句中才會使用到該索引。
2. 索引前綴性的第二層意思:對於索引的第一個字段,用like時左邊必須是固定值,通配符只能出現在右邊。select * from AAA where a like '1%';會用到索引;而select * from AAA where a like '%1';不會用到索引。
3.索引前綴性的第三層意思:如果在字段前加了函數,則索引會被抑制,例如:select * from aaa where trim(a)=1,則不會用到索引。
在字段前嵌入了表達式,索引也將被抑制。假設a是date格式的,那么where a+7<sysdate將不會用到索引,而where a<sysdate-7會用到索引。

 


還有兩個特殊聲明:
1).select * from AAA where a=:xxx and c=sysdate與 select * from AAA where c=sysdate and a=:xxx;都會用到索引,即與where語句中字段出現的順序無關;

2).select * from AAA where a=:xxx and b=1;會使用索引,此時A出現,即使其他字段不是索引字段也會使用到索引。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM