什么情況下設(shè)置了索引但無法使用,索引無效
1)?以”%”開頭的LIKE語句,模糊匹配:紅色標(biāo)識位置的百分號會導(dǎo)致相關(guān)列的索引無法使用
2)?Or語句前后沒有同時使用索引
3)?數(shù)據(jù)類型出現(xiàn)隱式轉(zhuǎn)化(如varchar不加單引號的話可能會自動轉(zhuǎn)換為int型,會使索引無效,產(chǎn)生全表掃描。)
4)在索引列上使用IS NULL或IS NOT NULL操作。索引是不索引空值的,所以這樣的操作不能使用索引,可以用其他的辦法處理,例如:數(shù)字類型,判斷大于0,字符串類型設(shè)置一個默認(rèn)值,判斷是否等于默認(rèn)值即可
5)在索引字段上使用not,<>,!=,eg<>操作符(不等于):不等于操作符是永遠(yuǎn)不會用到索引的,因此對它的處理只會產(chǎn)生全表掃描。用其它相同功能的操作運(yùn)算代替,如a<>0改為a>0 or a<0
6)對索引字段進(jìn)行計(jì)算操作
7)在索引字段上使用函數(shù)
4.如何設(shè)計(jì)一個高并發(fā)的系統(tǒng)
1)?數(shù)據(jù)庫的優(yōu)化,包括合理的事務(wù)隔離級別、SQL語句優(yōu)化、索引優(yōu)化
2)?使用緩存、盡量減少數(shù)據(jù)庫IO
3)?分布式數(shù)據(jù)庫、分布式緩存
4)?服務(wù)器的負(fù)載均衡