當您需要最佳化查詢語句時,例如查看查詢是否有效使用了索引,您可以通過EXPLAIN語句展示查詢語句的執行計畫。本文介紹如何使用EXPLAIN語句來展示您的查詢計劃。
引擎與版本
EXPLAIN語句適用於寬表引擎和時序引擎。
寬表引擎從2.6.3版本開始支援不同深度的查詢計劃。
文法
explain_statement ::= EXPLAIN [ PLAN ] [ explain_depth_expression ]
[ FOR ] select_statement;
explain_depth_expression ::= { WITH TYPE | WITHOUT IMPLEMENTATION }使用說明
計劃深度(explain_depth_expression)
重要
要求Lindorm SQL為2.6.4及以上版本。如何查看Lindorm SQL的版本,請參見SQL版本說明。
EXPLAIN語句展示的查詢計劃分為三個深度,其說明和指定方法如下:
深度 | 深度運算式 | 說明 |
物理計劃 | 不指定 | 已經經過最佳化器最佳化選擇後的最終物理計劃。 |
邏輯計劃 | WITHOUT IMPLEMENTATION | 僅產生該查詢未經最佳化的邏輯計劃。 |
類型計劃 | WITH TYPE | 僅產生該查詢的返回結果集中的資料行的每一列的類型。 |
選擇語句(select_statement)
文法中的select_statement即為Lindorm中SQL支援的查詢語句。
樣本
樣本表test的結構如下:
CREATE TABLE test (
p1 VARCHAR(255) NOT NULL,
c1 VARCHAR(255),
PRIMARY KEY (p1)
);部分列寫入資料:
INSERT INTO test (p1, c1) VALUES
('3abc9378', '10'),
('3def9378', NULL),
('3ghi1234', '15'),
('3jkl5678', NULL),
('3mno9378', '20'),
('3pqr0000', '25'),
('3stu9378', '30'),
('3vwx0000', NULL),
('3yz_9378', '35'),
('3_1239378', '40');以下樣本展示了對同一條查詢語句擷取不同深度的查詢計劃的方式。
產生物理計劃
EXPLAIN SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;產生邏輯計劃
EXPLAIN WITHOUT IMPLEMENTATION FOR SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;組建類型計劃
EXPLAIN WITH TYPE FOR SELECT POSITION('9378' IN p1) AS lp, COUNT(c1) FROM (SELECT * FROM test WHERE p1 like '3_%') GROUP BY lp ORDER BY lp;