下面使用的mysql官方測試庫測試
當索引是字元型且是主鍵時:
departments表:
可以看到,隻有d後面有%時,type是range也就是索引範圍查詢,通過索引字段範圍擷取表中部分資料記錄。
當d前面有%時,走的是全索引掃描,和ALL類型類似,隻不過ALL類型是全表掃描,而index類型則僅僅掃描所有的所有,而不掃描資料。
當索引是字元型表中隻有索引字段與主鍵時,結果與上面相同。
當索引是字元型,表中存在非索引字段時:
測試表:test_table
可以看到,當d前面沒有%時,type是range也就是索引範圍查詢,通過索引字段範圍擷取表中部分資料記錄。
當d前面有%時,type是all,即掃描全表,這個類型是查詢性能最差的查詢之一,這樣的查詢在資料量大的情況下,随資料庫的性能是災難級的。 這裡之是以是all不是index,是因為name字段不存在于value的索引樹上,導緻了掃表。
當索引是非字元型時:
employees表:
無論%加在哪都會進行掃表,type為All,這裡因為主鍵是數字型,查詢條件是字元型,資料類型不比對是以沒法通過索引查詢