mysql explain字段含义,MySQL(十七):EXPLAIN 输出信息之 Extra 字段解释
Child of 'table' pushed join@1 (JSON: message text)
This table is referenced as the child of table in a join that can be pushed down to the NDB kernel. (此表在聯(lián)接中作為子表被引用.......)
const row not found (JSON property: const_row_not_found)
例如出現(xiàn) SELECT ... FROM tbl_name 之類的查詢,但表是空的。
Deleting all rows (JSON property: message)
對于 DELETE ,某些存儲引擎(如 MyISAM)提供了一種可以簡單快捷刪除所有表行的方法。如果引擎使用此方法估化,則會顯示該值。
Distinct (JSON property: distinct)
MySQL 查找沒有重復的值,在找到第一個匹配行后就會停止搜索更多的行。
FirstMatch(tbl_name) (JSON property: first_match)
為 tbl_name 表使用半聯(lián)接 FirstMatch 聯(lián)接快捷方式策略。
Full scan on NULL key (JSON property: message)
當優(yōu)化器無法使用索引查找訪問方法時,子查詢優(yōu)化作為回退策略會出現(xiàn)該值。
Impossible HAVING (JSON property: message)
HAVING 子句一直是 false 并且無法選擇任何行。
Impossible WHERE (JSON property: message)
WHERE 子句一直是 false 并且無法選擇任何行。
Impossible WHERE noticed after reading const tables (JSON property: message)
MySQL 已經(jīng)讀取了所有 const (和 system) 表,并且注意到 WHERE 子句一直為 false。
LooseScan(m..n) (JSON property: message)
使用半聯(lián)接 LooseScan 策略。m 和 n 是 key 的編號。
No matching min/max row (JSON property: message)
沒有行滿足條件查詢,如 SELECT MIN(...) FROM ... WHERE condition。
no matching row in const table (JSON property: message)
對于具有聯(lián)接的查詢,有一個空表或沒有滿足唯一索引條件的行的表會出現(xiàn)該值。
No matching rows after partition pruning (JSON property: message)
對于 DELETE 和 UPDATE ,優(yōu)化器在分區(qū)修剪(精簡)之后找不到要刪除或更新的內(nèi)容。與 SELECT 語句的 Impossible WHERE 的含義相似。
No tables used (JSON property: message)
查詢沒有 FROM 子句,或者使用 FROM DUAL 子句。
對于 INSERT 或 FRPLACE 語句,EXPLAIN 在沒有 SELECT 部分時顯示該值。
例如,出現(xiàn)在 EXPLAIN INSERT INTO t VALUES(10) 中,該語句等同于 EXPLAIN INSERT INTO t SELECT 10 FROM DUAL.
Not exists (JSON property: message)
MySQL 能夠?qū)Σ樵儓?zhí)行 LEFT JOIN 優(yōu)化,并且在找到與 LEFT JOIN 條件匹配的行后,不會檢查此表中其它的行。如下示例:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
假設 t2.id 被定義為 NOT NULL,MySQL掃描 t1 并使用 t1.id 的值在 t2 中查找行。 如果 MySQL 在t2中找到匹配的行,則它知道 t2.id 永遠不能為 NULL,并且不會掃描 t2 中具有相同 id 值的其余行。
換句話說,對于 t1 中的每一行,MySQL 需要在 t2 中只進行一次查找,而不管 t2 中實際匹配多少行。
Plan isn't ready yet (JSON property: none)
執(zhí)行計劃還沒還沒創(chuàng)建完成。當優(yōu)化器尚未完成為聯(lián)接中的掃許語句創(chuàng)建執(zhí)行計劃時,EXPLAIN FOR CONNECTION 會出現(xiàn)該值。
Range checked for each record (index map: N) (JSON property: message)
MySQL 沒有找到可用的好索引,但發(fā)現(xiàn)前面表中的列值是已知后,可能會使用某些索引。
對于前面的表行,MySQL 檢查是否可以使用 range 或 index_merge 訪問方法業(yè)檢索行,這不是很快,但比沒有索引的聯(lián)接快。
Scanned N databases (JSON property: message)
表示在處理 INFORMATION_SCHEMA 表的查詢時,服務器執(zhí)行的目錄掃描數(shù)。N 的值可以是0,1 或 ALL。
Select tables optimized away (JSON property: message)
優(yōu)化器確定:1.最多只返回一行,2.若要生成此行,必須讀取確定的行。在優(yōu)化階段(例如,通過讀取索引行)可以獲得要讀取的行時,查詢執(zhí)行期間不需要讀取任何表。
當隱式分組查詢(包含聚合函數(shù),但不包含 group by 子句)時,將滿足第一個條件。當每使用一個索引執(zhí)行一行查找時,就滿足了第二個條件。讀取的索引數(shù)決定了要讀取的行數(shù)。
隱式分組查詢示例:
SELECT MIN(c1), MIN(c2) FROM t1;
c1 和 c2 都是索引列,并且該列是索引的第一列。可以通過讀取一個索引行來檢索 MIN(c1) ,并且通過從不同的索引中讀取一行來檢索 MIN(c2) 。本例中,返回的一行數(shù)據(jù),是由讀取兩個確定性行生成的。
如果讀取的行不是確定的,則 Extra 不會顯示此值,如下示例:
SELECT MIN(c2) FROM t1 WHERE c1 <= 10;
Skip_open_table, Open_frm_only, Open_full_table (JSON property: message)
這此值表示適用于 INFORMATION_SCHEMA 表的查詢的文件打開優(yōu)化。
Skip_open_table:不需要打開表文件。通過掃描數(shù)據(jù)庫目錄,該信息已在查詢中可用。
Open_frm_only:只需打開表的 .frm 文件。
Open_full_table:未經(jīng)優(yōu)化的信息查找。必須打開 .frm,.MYD 和 .MYI文件。
Start temporary, End temporary (JSON property: message)
臨時表用于半聯(lián)接 Duplicate Weedout 策略。
unique row not found (JSON property: message)
對于 SELECT .... FROM tbl_name 之類的查詢,沒有行滿足表上 UNIQUE 索引 或 PRIMARY KEY 的條件。
Using filesort (JSON property: using_filesort)
MySQL 必須執(zhí)行額外的操作,以了解如何按排序順序檢索行。
排序是根據(jù)聯(lián)接類型遍歷所有行,并為所有與 WHERE 子句匹配的行存儲排序的 key 和 指向行的指針;然后對 key 進行排序,并按排序順序檢索行。
Using index (JSON property: using_index)
僅使用索引樹中的信息從表中檢索列信息。當查詢公使用單個索引列時,顯示此策略。
對于具有用戶定義的聚簇索引的 InnoDB 表,即使 Extra 列中不存在使用索引,實際也是可以使用索引。如果 type 是 index 并且 key 是 PRIMARY,則會出現(xiàn)此情況,即使用主鍵查詢。
Using index condition (JSON property: using_index_condition)
通過訪問索引元組并首先測試它他來讀取表,以確定是否讀取全表的行。
Using index for group-by (JSON property: using_index_for_group_by)
與 Using index 表訪問方式相似。Using index for group-by 表示MySQL找到了一個索引,可用于檢索 GROUP BY 或 DISTINCT 查詢所有的列,而無需對實際的表進行任何額外的磁盤訪問。
此外,索引以最有效的方式使用,因此,對每個 group, 只需讀取少數(shù)的索引。
Using join buffer (Block Nested Loop), Using join buffer (Batched Key Access) (JSON property: using_join_buffer)
將早期聯(lián)接中的表部分讀入聯(lián)接緩沖區(qū),然后從緩沖區(qū)中使用他們的行來執(zhí)行與當前表的聯(lián)接。
也就是說,將緩沖 explain 輸出前一行上表中的 key,并從使用 join buffer 的行指向的表中分批提取匹配的行。
Using MRR (JSON property: message)
使用 Multi-Range Read 優(yōu)化策略讀取表。
Using sort_union(...), Using union(...), Using intersect(...) (JSON property: message)
這些指示的特定算法,顯示了如何為 index_merge 聯(lián)接類型合并索引掃描。
Using temporary (JSON property: using_temporary_table)
要對查詢進行解析,MySQL 需要創(chuàng)建一個臨時表來保存結果。如果查詢包含多個不同列的 GROUP BY 和ORDER BY 子句,則通常會發(fā)生此情況。
Using where (JSON property: attached_condition)
WHERE 子句用于限制那些行與下一個表匹配或發(fā)送到客戶端。
除非特意要檢索表中的所有行,否則若 Extra 值不是 Using where 并且表聯(lián)接是 ALL 或 index,則可能出錯了。
Using where with pushed condition (JSON property: message)
此項只適用于 NDB 表。意思是 NDB Cluster 正在使用下推優(yōu)化來提高非索引列和常量之間直接比較的效率。
Zero limit (JSON property: message)
該查詢具有 LIMIT 0 子句,并且無法選擇任何行。
總結
以上是生活随笔為你收集整理的mysql explain字段含义,MySQL(十七):EXPLAIN 输出信息之 Extra 字段解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab里面板有什么作用,MATLA
- 下一篇: php数组函数及用法,php数组函数 i