- 查詢的列中的值存在null
null無法參與到索引建立的樹中 - 列中的值較少(重復(fù)數(shù)據(jù)較多)
- 前導(dǎo)模糊搜索
由于前面是模糊的,無法利用索引 - 查詢條件中有or(除非每一列都加索引)
MySQL主要提供2種方式的索引:B-Tree索引,Hash索引
B樹索引具有范圍查找和前綴查找的能力,對于有N節(jié)點的B樹,檢索一條記錄的復(fù)雜度為O(LogN)。相當(dāng)于二分查找。
哈希索引只能做等于查找,但是無論多大的Hash表,查找復(fù)雜度都是O(1)。
顯然,如果值的差異性大,并且以等值查找(=、 <、>、in)為主,Hash索引是更高效的選擇,它有O(1)的查找復(fù)雜度。
如果值的差異性相對較差,并且以范圍查找為主,B樹是更好的選擇,它支持范圍查找。