告訴你一句七字口訣,索引失效能記住一輩子


索引失效問題是面試必問問題,因為索引失效的情況比較多,很多同學記不住,面試的時候回答不好。我仔細研究了七七四十七天,設計了一句七字口訣,記住這句口訣,以后再遇到這個問題就可以拿滿分了。

 

七字口訣就是:

模  型  數  空  運  最  快

口訣字面意思就是,要運送一個產品模型的話,要用空運,不要用陸運和海運,數空運最快。叫做:模型數空運最快。

 

下面我拆開逐字講解一下:

模:模糊查詢的意思。like的模糊查詢以%開頭,索引失效。比如:

SELECT * FROM `user` WHERE `name` LIKE '%老猿';

 

型:代表數據類型。類型錯誤,如字段類型為varchar,where條件用number,索引也會失效。比如:

SELECT * FROM `user` WHERE height= 180; 

height為varchar類型導致索引失效。

 

數:是函數的意思。對索引的字段使用內部函數,索引也會失效。這種情況下應該建立基於函數的索引。比如:

SELECT * FROM `user` WHERE DATE(create_time) = '2020-09-03';  

create_time字段設置索引,那就無法使用函數,否則索引失效。

 

空:是Null的意思。索引不存儲空值,如果不限制索引列是not null,數據庫會認為索引列有可能存在空值,所以不會按照索引進行計算。比如:

SELECT * FROM `user` WHERE address IS NULL --不走索引。

SELECT * FROM `user` WHERE address IS NOT NULL;--走索引。

建議大家這設計字段的時候,如果沒有必要的要求必須為NULL,那么最好給個默認值空字符串,這可以解決很多后續的麻煩(切記)。

 

運:是運算的意思。對索引列進行(+,-,*,/,!, !=, <>)等運算,會導致索引失效。比如:

SELECT * FROM `user` WHERE age - 1 = 20;

 

最:是最左原則。在復合索引中索引列的順序至關重要。如果不是按照索引的最左列開始查找,則無法使用索引。

 

快:全表掃描更快的意思。如果數據庫預計使用全表掃描要比使用索引快,則不使用索引。

 

這就是索引失效的七字口訣,請大家點贊之后默念三遍,模型數空運最快。

以上內容皆轉自 ‘老猿說開發’


免責聲明!

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



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