是否可以分析 SQLite SQL 查询?

Posted

技术标签:

【中文标题】是否可以分析 SQLite SQL 查询?【英文标题】:Is it possible to profile a SQLite SQL query? 【发布时间】:2013-12-20 00:19:29 【问题描述】:

我知道查询需要多长时间。我想知道查询的每个部分需要多长时间,以便我可以缓存某些部分以提高性能。然而,查询相当复杂。这是解释的输出:

[2,0,0,扫描表 M]
[3,0,0,扫描表 M]
[1,0,0,复合子查询 2 和 3(联合所有)]
[5,0,0,扫描表 E]
[6,0,0,扫描表 E]
[4,0,0,复合子查询 5 和 6(联合所有)]
[8,0,0,扫描表 P]
[9,0,0,扫描表 P]
[7,0,0,复合子查询 8 和 9(联合所有)]
[0,0,0,扫描子查询 1 作为 m]
[0,0,0,执行列表子查询 10]
[0,0,0,执行列表子查询 10]
[0,1,1,SEARCH SUBQUERY 4 AS e USING AUTOMATIC COVERING INDEX (e=?)]
[0,2,2,扫描子查询 7 AS p]
[0,0,0,使用 TEMP B-TREE 进行分组]
[0,0,0,使用 TEMP B-TREE FOR ORDER BY]

有什么方法可以知道每个步骤需要多长时间?

【问题讨论】:

可能重复:***.com/questions/3199790/… 【参考方案1】:

您可以使用sqlite3_stmt_status 获取语句执行的总体统计信息,但没有更细粒度的统计信息。

EXPLAIN QUERY PLAN 显示的步骤实际上并不是分开的;各种操作的执行通常是嵌套和交错的。

阅读Query Planning、The Query Planner、The Next-Generation Query Planner 和EXPLAIN QUERY PLAN。 有了这些信息,您通常可以估计您的(子)查询的效率。

【讨论】:

以上是关于是否可以分析 SQLite SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入之bWAPP之sqli_11.php

SQLite 中是不是有布尔文字?

sqli-labs1-10基础掌握

Blind SQLi

SQL注入--联合查询+布尔盲注

sqli~less5-8