explain顯示了MySQL如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。
explain的使用方法很簡單,只需要在select查詢語句前面加上explain關鍵字就行。下面給出一個實例:
下面給出回顯的資料的意義:
(1)id:SELECT識別符,這是SELECT查詢序號。
(2)select_type:select類型,它有以下幾個值
1)simple 它表示簡單的select,沒有union和子查詢
2)primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary。 3)union union语句的第二个或者说是后面那一个.现执行一条语句。
explain select * from uchome_space limit 10 union select * from uchome_space limit 10,10
(4)table:顯示這一行的資料是關於哪張表的
(5 )type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、 index和ALL
(6)possible_ s:顯示可能套用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個適當的語句
(7)key: 實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇最佳化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或用IGNORE INDEX(indexname)來強制MYSQL忽略索引
1)Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 2)Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了 3)Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。 这是使用索引的最慢的连接之一 4)Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。 它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 5)Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候 6)Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
以上是MySQL查詢效能分析工具-explain關鍵字分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!