1.语法
sql-stmt:
2.说明
SQL 语句前面可以有关键字“EXPLAIN”或短语“EXPLAIN QUERY PLAN”。任一修改都会使 SQL 语句表现为查询,并返回有关在省略 EXPLAIN 关键字或短语的情况下 SQL 语句将如何运行的信息。
EXPLAIN 和 EXPLAIN QUERY PLAN 的输出仅用于交互式分析和故障排除。输出格式的详细信息可能会从一个 SQLite 版本到下一个版本发生变化。应用程序不应使用 EXPLAIN 或 EXPLAIN QUERY PLAN,因为它们的确切行为是可变的并且只有部分记录。
当 EXPLAIN 关键字单独出现时,它会导致该语句表现为一个查询,该查询返回
虚拟机指令序列,如果 EXPLAIN 关键字不存在,它将用于执行该命令。当 EXPLAIN QUERY PLAN 短语出现时,该语句返回有关将要使用的查询计划的高级信息。
此处更详细地描述了 EXPLAIN QUERY PLAN 命令
。
2.1. EXPLAIN 在运行时运行,而不是在准备时运行
EXPLAIN 和 EXPLAIN QUERY PLAN 前缀影响使用sqlite3_step()运行准备好的语句的行为。使用sqlite3_prepare()或类似方法生成新准备语句的过程(大部分)不受 EXPLAIN 的影响。(上一句的例外是,在构建 EXPLAIN QUERY PLAN 准备语句时,省略了 EXPLAIN QUERY PLAN 使用的一些特殊操作码,作为性能优化。)
这意味着在 sqlite3_prepare() 期间发生的操作不受 EXPLAIN 的影响。
一些PRAGMA语句在 sqlite3_prepare() 期间而不是在 sqlite3_step() 期间完成它们的工作。这些 PRAGMA 语句不受 EXPLAIN 的影响。无论有没有 EXPLAIN 前缀,它们的操作都是一样的。不受 EXPLAIN 影响的 PRAGMA 语句集可能因一个版本而异。某些 PRAGMA 语句根据其参数在 sqlite3_prepare() 期间运行。为获得一致的结果,请避免在 PRAGMA 语句上使用 EXPLAIN。
无论是否存在 EXPLAIN 或 EXPLAIN QUERY PLAN,都会调用
授权方回调。