【问题标题】:Is it possible to profile a SQLite SQL query?是否可以分析 SQLite SQL 查询?
【发布时间】: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]

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

【问题讨论】:

标签: sql c sqlite


【解决方案1】:

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

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

阅读Query PlanningThe Query PlannerThe Next-Generation Query PlannerEXPLAIN QUERY PLAN。 有了这些信息,您通常可以估计您的(子)查询的效率。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2020-12-22
    • 2014-01-07
    • 2014-06-09
    • 2017-01-24
    相关资源
    最近更新 更多