我知道查询需要多长时间。我想知道查询的每个部分需要多长时间,以便我可以缓存某些部分以提高性能。然而,查询相当复杂。这是解释的输出:
[2,0,0,SCAN TABLE M] [3,0,0,SCAN TABLE M] [1,0,0,COMPOUND SUBQUERIES 2 AND 3 (UNION ALL)] [5,0,0,SCAN TABLE E] [6,0,0,SCAN TABLE E] [4,0,0,COMPOUND SUBQUERIES 5 AND 6 (UNION ALL)] [8,0,0,SCAN TABLE P] [9,0,0,SCAN TABLE P] [7,0,0,COMPOUND SUBQUERIES 8 AND 9 (UNION ALL)] [0,0,0,SCAN SUBQUERY 1 AS m] [0,0,0,EXECUTE LIST SUBQUERY 10] [0,0,0,EXECUTE LIST SUBQUERY 10] [0,1,1,SEARCH SUBQUERY 4 AS e USING AUTOMATIC COVERING INDEX (e=?)] [0,2,2,SCAN SUBQUERY 7 AS p] [0,0,0,USE TEMP B-TREE FOR GROUP BY] [0,0,0,USE TEMP B-TREE FOR ORDER BY]
有没有办法找出每个步骤需要多长时间?
答案 0 :(得分:2)
您可以使用sqlite3_stmt_status获取语句执行的总体统计信息,但没有更精细的统计信息。
EXPLAIN QUERY PLAN
显示的步骤实际上并不是分开的;各种操作的执行通常是嵌套和交错的。
阅读Query Planning,The Query Planner,The Next-Generation Query Planner和EXPLAIN QUERY PLAN。 有了这些信息,您通常可以估算出(子)查询的效率。