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