SQLite explain 查询语句 (select) 进行分析
SQLite EXPLAIN
命令或者 EXPLAIN QUERY PLAN
命令用于对查询语句 (select) 进行分析
EXPLAIN
命令或者 EXPLAIN QUERY PLAN
命令只用于交互式分析和排除故障
可以使用它们来分析查询语句的性能,比如有没有使用索引,或者检查的行总数等
语法
EXPLAIN 命令的语法格式如下
EXPLAIN [SQLite Query]
EXPLAIN QUERY PLAN 命令的语法格式如下
EXPLAIN QUERY PLAN [SQLite Query]
范例
先运行下面的 SQLite SQL 语句创建测试数据
DROP TABLE tbl_employee; CREATE TABLE tbl_employee ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name CHAR(64) NOT NULL, age INTEGER NOT NULL, city CHAR(64), salary REAL ); INSERT INTO tbl_employee (name,age,city,salary) VALUES ('张三', 25, 'pek', 102400.00 ), ('李四', 18, 'shanghai', 88888.00 ), ('王五', 22, 'hangzhou', 22000.00 ), ('孙六', 32, 'pek', 32000.00 ), ('钱七', 25, 'shanghai', 25000.00 ), ('赵二', 45, 'pek', 45800.00 ), ('冯九', 37, 'chengdu', 15000.00 );
我们先运行一个 SQL 语句查询 salary
高于 30000
的员工
SELECT * FROM tbl_employee WHERE salary > 30000;
输出结果如下
id name age city salary ---------- ---------- ---------- ---------- ---------- 1 张三 25 pek 102400.0 2 李四 18 shanghai 88888.0 4 孙六 32 pek 32000.0 6 赵二 45 pek 45800.0
然后我们给 SQL 语句添加 explain
来分析下这条语句
EXPLAIN SELECT * FROM tbl_employee WHERE salary > 30000;
输出结果如下 (我去掉了第一列 addr)
每一行每一列代表啥意思呢?以后再讲,不然就说来话长
Explain Query Plan
我们一般情况下是使用 Explain Query Plan
EXPLAIN QUERY PLAN SELECT * FROM tbl_employee WHERE salary > 30000;
输出结果如下
selectid order from detail ---------- ---------- ---------- ----------------------- 0 0 0 SCAN TABLE tbl_employee
SCAN
表示全表扫描,没有用到所以,我们给 salary
添加索引试一试
CREATE INDEX salary ON tbl_employee(salary);
然后再运行上一条语句,可以看到 detail
列输出如下
SEARCH TABLE tbl_employee USING INDEX salary (salary>?)
USING INDEX salary
查询会用到索引 salary