当您需要优化查询语句时,例如查看查询是否有效的使用了索引,您可以通过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;
文档内容是否对您有帮助?