模 型 數(shù) 空 運(yùn) 最 快
口訣字面意思就是,要運(yùn)送一個產(chǎn)品模型的話,要用空運(yùn),不要用陸運(yùn)和海運(yùn),數(shù)空運(yùn)最快。叫作:模型數(shù)空運(yùn)最快。
下面我拆開逐字講解一下:
模:
模糊查詢的意思。like的模糊查詢以%開頭,索引失效。比如:
SELECT * FROM user WHERE name LIKE ‘%老猿’;
型:
代表數(shù)據(jù)類型。類型錯誤,如字段類型為varchar,where條件用number,索引也會失效。比如:
SELECT * FROM user WHERE height= 180;
height為varchar類型導(dǎo)致索引失效。
數(shù):
是函數(shù)的意思。對索引的字段使用內(nèi)部函數(shù),索引也會失效。這種情況下應(yīng)該建立基于函數(shù)的索引。比如:
SELECT * FROM user WHERE DATE(create_time) = ‘2020-09-03’;
create_time字段設(shè)置索引,那就無法使用函數(shù),否則索引失效。
空:
是Null的意思。索引不存儲空值,如果不限制索引列是not null,數(shù)據(jù)庫會認(rèn)為索引列有可能存在空值,所以不會按照索引進(jìn)行計算。比如:
SELECT * FROM user WHERE address IS NULL不走索引。
SELECT * FROM user WHERE address IS NOT NULL;走索引。
建議大家這設(shè)計字段的時候,如果沒有必要的要求必須為NULL,那么最好給個默認(rèn)值空字符串,這可以解決很多后續(xù)的麻煩(切記)。
運(yùn):
是運(yùn)算的意思。對索引列進(jìn)行(+,-,*,/,!, !=, <>)等運(yùn)算,會導(dǎo)致索引失效。比如:
SELECT * FROM user WHERE age - 1 = 20;
最:
是最左原則。在復(fù)合索引中索引列的順序至關(guān)重要。如果不是按照索引的最左列開始查找,則無法使用索引。
快:
全表掃描更快的意思。如果數(shù)據(jù)庫預(yù)計使用全表掃描要比使用索引快,則不使用索引。
這就是索引失效的七字口訣,請大家點(diǎn)贊之后默念三遍,模型數(shù)空運(yùn)最快。