# SQLite Explain(解释)
在 SQLite 语句之前,可以使用 "EXPLAIN" 关键字或 "EXPLAIN QUERY PLAN" 短语,用于描述表的细节。
如果省略了 EXPLAIN 关键字或短语,任何的修改都会引起 SQLite 语句的查询行为,并返回有关 SQLite 语句如何操作的信息。
* 来自 EXPLAIN 和 EXPLAIN QUERY PLAN 的输出只用于交互式分析和排除故障。
* 输出格式的细节可能会随着 SQLite 版本的不同而有所变化。
* 应用程序不应该使用 EXPLAIN 或 EXPLAIN QUERY PLAN,因为其确切的行为是可变的且只有部分会被记录。
## 语法
**EXPLAIN** 的语法如下:
```
EXPLAIN [SQLite Query]
```
**EXPLAIN QUERY PLAN** 的语法如下:
```
EXPLAIN QUERY PLAN [SQLite Query]
```
## 实例
假设 COMPANY 表有以下记录:
```
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
```
现在,让我们检查 SELECT 语句中的 **Explain** 使用:
```
sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary >= 20000;
```
这将产生以下结果:
```
addr opcode p1 p2 p3
---------- ---------- ---------- ---------- ----------
0 Goto 0 19
1 Integer 0 0
2 OpenRead 0 8
3 SetNumColu 0 5
4 Rewind 0 17
5 Column 0 4
6 RealAffini 0 0
7 Integer 20000 0
8 Lt 357 16 collseq(BI
9 Rowid 0 0
10 Column 0 1
11 Column 0 2
12 Column 0 3
13 Column 0 4
14 RealAffini 0 0
15 Callback 5 0
16 Next 0 5
17 Close 0 0
18 Halt 0 0
19 Transactio 0 0
20 VerifyCook 0 38
21 Goto 0 1
22 Noop 0 0
```
现在,让我们检查 SELECT 语句中的 **Explain Query Plan** 使用:
```
SQLite> EXPLAIN QUERY PLAN SELECT * FROM COMPANY WHERE Salary >= 20000;
```
```
order from detail
---------- ---------- -------------
0 0 TABLE COMPANY
```
- SQL基础
- SQL 简介
- SQL 语法
- SQL SELECT 语句
- SQL SELECT DISTINCT 语句
- SQL WHERE 子句
- SQL AND & OR 运算符
- SQL ORDER BY 子句
- SQL INSERT INTO 语句
- SQL UPDATE 语句
- SQL DELETE 语句
- SQL高级
- SQL TOP 子句
- SQL LIKE 操作符
- SQL 通配符
- SQL IN 操作符
- SQL BETWEEN 操作符
- SQL Alias(别名)
- SQL JOIN
- SQL INNER JOIN 关键字
- SQL LEFT JOIN 关键字
- SQL RIGHT JOIN 关键字
- SQL FULL JOIN 关键字
- SQL UNION 和 UNION ALL 操作符
- SQL SELECT INTO 语句
- SQL CREATE DATABASE 语句
- SQL CREATE TABLE 语句
- SQL 约束 (Constraints)
- SQL NOT NULL 约束
- SQL UNIQUE 约束
- SQL PRIMARY KEY 约束
- SQL FOREIGN KEY 约束
- SQL CHECK 约束
- SQL DEFAULT 约束
- SQL CREATE INDEX 语句
- SQL 撤销索引、表以及数据库
- SQL ALTER TABLE 语句
- SQL AUTO INCREMENT 字段
- SQL VIEW(视图)
- SQL函数
- SQL Date 函数
- SQL NULL 值
- SQL NULL 函数
- SQL 数据类型
- SQL 服务器 - RDBMS
- SQL 函数
- SQL AVG 函数
- SQL COUNT() 函数
- SQL FIRST() 函数
- SQL LAST() 函数
- SQL MAX() 函数
- SQL MIN() 函数
- SQL SUM() 函数
- SQL GROUP BY 语句
- SQL HAVING 子句
- SQL UCASE() 函数
- SQL LCASE() 函数
- SQL MID() 函数
- SQL LEN() 函数
- SQL ROUND() 函数
- SQL NOW() 函数
- SQL FORMAT() 函数
- SQL 快速参考
- SQLite 基础
- SQLite 简介
- SQLite 安装
- SQLite 命令
- SQLite 语法
- SQLite 数据类型
- SQLite 创建数据库
- SQLite 附加数据库
- SQLite 分离数据库
- SQLite 创建表
- SQLite 删除表
- SQLite Insert 语句
- SQLite Select 语句
- SQLite 运算符
- SQLite 表达式
- SQLite Where 子句
- SQLite AND/OR 运算符
- SQLite Update 语句
- SQLite Delete 语句
- SQLite Like 子句
- SQLite Glob 子句
- SQLite Limit 子句
- SQLite Order By
- SQLite Group By
- SQLite Having 子句
- SQLite Distinct 关键字
- SQLite 高级
- SQLite PRAGMA
- SQLite 约束
- SQLite Joins
- SQLite Unions 子句
- SQLite NULL 值
- SQLite 别名
- SQLite 触发器(Trigger)
- SQLite 索引(Index)
- SQLite Indexed By
- SQLite Alter 命令
- SQLite Truncate Table
- SQLite 视图(View)
- SQLite 事务(Transaction)
- SQLite 子查询
- SQLite Autoincrement(自动递增)
- SQLite 注入
- SQLite Explain(解释)
- SQLite Vacuum
- SQLite 日期 & 时间
- SQLite 常用函数
- SQLite 接口
- SQLite - C/C++
- SQLite - Java
- SQLite - PHP
- SQLite - Perl
- SQLite - Python
- MySQL 教程
- MySQL 教程
- MySQL 安装
- MySQL 管理
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- MySQL 排序
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- MySQL 元数据
- MySQL 序列使用
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- 免责声明