我从我的应用程序中执行了一个复杂的 SQL 查询。该查询在 3.6.11 (64ms) 版本中运行良好。在 3.6.22 中运行时,需要 100 多秒才能完成。从命令行客户端执行时,在 11 和 22 中执行都很快。因此我想从我的应用程序内部运行带有“EXPLAIN”的查询。可能吗?我尝试准备并执行查询,然后将该列作为文本读取,但结果为空。
可以使用 C++ API 从我的应用程序中执行“解释”吗?
根据SQLite 操作码页面:
根据编译时选项,您可以将 SQLite 虚拟机置于通过将消息写入标准输出来跟踪其执行的模式。非标准 SQL“PRAGMA”注释可用于打开和关闭跟踪。要打开跟踪,请输入:
PRAGMA vdbe_trace=on;
您可以通过输入类似的语句但将值“on”更改为“off”来关闭回溯。
此外,查询的输出EXPLAIN ...
只是一组(有序的)记录,如果您愿意的话,您可以对其进行解码。请参阅:此 SQLite 页面