共計 1561 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。
這篇文章給大家分享的是有關(guān) SQL 中 EXPLAIN 語法怎么用的內(nèi)容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
possible_keys:possible_keys 列指出 MySQL 能使用哪個索引在該表中找到行。注意,該列完全獨立于 EXPLAIN 輸出所示的表的次序。這意味著在 possible_keys 中的某些鍵實際上不能按生成的表次序使用。
key:key 列顯示 MySQL 實際決定使用的鍵 (索引)。如果沒有選擇索引,鍵是 NULL。要想強制 MySQL 使用或忽視 possible_keys 列中的索引,在查詢中使用 FORCE INDEX、USE INDEX 或者 IGNORE INDEX。
key_len:key_len 列顯示 MySQL 決定使用的鍵長度。如果鍵是 NULL,則長度為 NULL。注意通過 key_len 值我們可以確定 MySQL 將實際使用一個多部關(guān)鍵字的幾個部分。
ref:ref 列顯示使用哪個列或常數(shù)與 key 一起從表中選擇行。
rows:rows 列顯示 MySQL 認為它執(zhí)行查詢時必須檢查的行數(shù)。
Extra:該列包含 MySQL 解決查詢的詳細信息。
Distinct:MySQL 發(fā)現(xiàn)第 1 個匹配行后,停止為當(dāng)前的行組合搜索更多的行。
Not exists:MySQL 能夠?qū)Σ樵冞M行 LEFT JOIN 優(yōu)化,發(fā)現(xiàn) 1 個匹配 LEFT JOIN 標(biāo)準(zhǔn)的行后,不再為前面的的行組合在該表內(nèi)檢查更多的行。
range checked for each record (index map: #):MySQL 沒有發(fā)現(xiàn)好的可以使用的索引,但發(fā)現(xiàn)如果來自前面的表的列值已知,可能部分索引可以使用。對前面的表的每個行組合,MySQL 檢查是否可以使用 range 或 index_merge 訪問方法來索取行。
Using filesort:MySQL 需要額外的一次傳遞,以找出如何按排序順序檢索行。通過根據(jù)聯(lián)接類型瀏覽所有行并為所有匹配 WHERE 子句的行保存排序關(guān)鍵字和行的指針來完成排序。然后關(guān)鍵字被排序,并按排序順序檢索行。
Using index:從只使用索引樹中的信息而不需要進一步搜索讀取實際的行來檢索表中的列信息。當(dāng)查詢只使用作為單一索引一部分的列時,可以使用該策略。
Using temporary:為了解決查詢,MySQL 需要創(chuàng)建一個臨時表來容納結(jié)果。典型情況如查詢包含可以按不同情況列出列的 GROUP BY 和 ORDER BY 子句時。
Using where:WHERE 子句用于限制哪一個行匹配下一個表或發(fā)送到客戶。除非你專門從表中索取或檢查所有行,如果 Extra 值不為 Using where 并且表聯(lián)接類型為 ALL 或 index,查詢可能會有一些錯誤。
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)了一個索引,可以用來查詢 GROUP BY 或 DISTINCT 查詢的所有列,而不要額外搜索硬盤訪問實際的表。并且,按最有效的方式使用索引,以便對于每個組,只讀取少量索引條目。
通過相乘 EXPLAIN 輸出的 rows 列的所有值,你能得到一個關(guān)于一個聯(lián)接如何的提示。這應(yīng)該粗略地告訴你 MySQL 必須檢查多少行以執(zhí)行查詢。當(dāng)你使用 max_join_size 變量限制查詢時,也用這個乘積來確定執(zhí)行哪個多表 SELECT 語句。
感謝各位的閱讀!關(guān)于“SQL 中 EXPLAIN 語法怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!