在進行mysql優化的時候,經常使用到explain sql語句 來進行分析sql語句的合理與否。但是在‘Extra'里經??梢钥吹経sing temporary和Using filesort,他們分別是什么意思呢?其他的像Using where或Using index又是啥意思呢?
Using filesort
MySQL需要額外的一次傳遞,以找出如何按排序順序檢索行。通過根據聯接類型瀏覽所有行并為所有匹配WHERE子句的行保存排序關鍵字和行的指針來完成排序。然后關鍵字被排序,并按排序順序檢索行。
Using temporary
為了解決查詢,MySQL需要創建一個臨時表來容納結果。典型情況如查詢包含可以按不同情況列出列的GROUP BY和ORDER BY子句時。
Using index
從只使用索引樹中的信息而不需要進一步搜索讀取實際的行來檢索表中的列信息。當查詢只使用作為單一索引一部分的列時,可以使用該策略。
Using where
WHERE子句用于限制哪一個行匹配下一個表或發送到客戶。除非你專門從表中索取或檢查所有行,如果Extra值不為Using where并且表聯接類型為ALL或index,查詢可能會有一些錯誤。
Using sort_union (...), Using union (...), Using intersect(...)
這些函數說明如何為index_merge聯接類型合并索引掃描。
Using index for group-by
類似于訪問表的Using index方式,Using index for group-by表示MySQL發現了一個索引,可以用來查詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤訪問實際的表。并且,按最有效的方式使用索引,以便對于每個組,只讀取少量索引條目。
如何做優化請參考:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#order-by-optimization