連接類型跟 ALL 一樣,不同的是它只掃描索引樹。它通常會比 ALL 快點,因為索引文件通常比數據文件小。MySQL在查詢的字段知識單獨的索引的一部分的情況下使用這種連接類型。
ALL
將對該表做全部掃描以和從前一個表中取得的記錄作聯合。這時候如果第一個表沒有被標識為 const 的話就不大好了,在其他情況下通常是非常糟糕的。正常地,可以通過增加索引使得能從表中更快的取得記錄以避免 ALL。
possible_keys
possible_keys 字段是指MySQL在搜索表記錄時可能使用哪個索引。注意,這個字段完全獨立於 EXPLAIN 顯示的表順序。這就意味著 possible_keys 裡面所包含的索引可能在實際的使用中沒用到。如果這個字段的值是 NULL,就表示沒有索引被用到。這種情況下,就可以檢查 WHERE 子句中哪些字段那些字段適合增加索引以提高查詢的性能。就這樣,創建一下索引,然後再用 EXPLAIN 檢查一下。詳細的查看章節"14.2.2 ALTER TABLE Syntax"。想看表都有什麼索引,可以通過 SHOW INDEX FROM tbl_name 來看。
key
key 字段顯示了MySQL實際上要用的索引。當沒有任何索引被用到的時候,這個字段的值就是 NULL。想要讓MySQL強行使用或者忽略在 possible_keys 字段中的索引列表,可以在查詢語句中使用關鍵字FORCE INDEX, USE INDEX, 或 IGNORE INDEX。如果是 MyISAM 和 BDB 類型表,可以使用 ANALYZE TABLE 來幫助分析使用使用哪個索引更好。如果是 MyISAM 類型表,運行命令 myisamchk --analyze 也是一樣的效果。詳細的可以查看章節"14.5.2.1 ANALYZE TABLE Syntax"和"5.7.2 Table Maintenance and Crash Recovery"。
key_len
key_len 字段顯示了MySQL使用索引的長度。當 key 字段的值為 NULL 時,索引的長度就是 NULL。注意,key_len 的值可以告訴你在聯合索引中MySQL會真正使用了哪些索引。