全部產品
Search
文件中心

Lindorm:EXPLAIN

更新時間:Jul 06, 2024

當您需要最佳化查詢語句時,例如查看查詢是否有效使用了索引,您可以通過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;