SQLite重新遍历表,它的效率如何?

SQLite重新遍历表,它的效率如何?,sqlite,Sqlite,我有以下疑问 WITH temptable AS (SELECT listid, isplayer, name, nametagname, OWNER, target, helditem, distance FROM SuspectListEntries indexed BY SuspectListEntriesByListID WHERE

我有以下疑问

WITH temptable AS
  (SELECT listid,
          isplayer,
          name,
          nametagname,
          OWNER,
          target,
          helditem,
          distance
   FROM SuspectListEntries indexed BY SuspectListEntriesByListID
   WHERE listid =
       (SELECT suspectList
        FROM BlocksBrokenByExplosion
        WHERE BlocksBrokenByExplosion.id=76142)
   ORDER BY distance ASC)
SELECT *
FROM
  (SELECT isplayer,
          name,
          nametagname,
          OWNER,
          target,
          helditem,
          distance
   FROM temptable
   LEFT JOIN
     (SELECT count(*)/7 AS cnt,
                           0 AS bonus
      FROM temptable) counter ON 0 = counter.bonus LIMIT 0,
                                                         7)
根据查询计划,它两次遍历诱惑,尽可能地从查询计划中推断出所有内容

"3","0","0","SEARCH TABLE SuspectListEntries USING INDEX SuspectListEntriesByListID (listid=?)"
"3","0","0","EXECUTE SCALAR SUBQUERY 4"
"4","0","0","SEARCH TABLE BlocksBrokenByExplosion USING INTEGER PRIMARY KEY (rowid=?)"
"3","0","0","USE TEMP B-TREE FOR ORDER BY"
"2","0","0","SCAN SUBQUERY 3"
"1","0","0","SEARCH TABLE SuspectListEntries USING INDEX SuspectListEntriesByListID (listid=?)"
"1","0","0","EXECUTE SCALAR SUBQUERY 5"
"5","0","0","SEARCH TABLE BlocksBrokenByExplosion USING INTEGER PRIMARY KEY (rowid=?)"
"1","1","1","SCAN SUBQUERY 2 AS counter"
"1","0","0","USE TEMP B-TREE FOR ORDER BY"
"0","0","0","SCAN SUBQUERY 1"
由于我的分页方法,它在表中移动了两次。它仍然在0毫秒内完成,记录数为10万条,因此速度本身并不是这个问题的问题

  • 我只是想知道,sqlite重新遍历临时视图的优化程度如何
  • sqlite是否真的像查询计划器所暗示的那样重建临时视图
  • 或者是在后台,临时视图的结果保存在内存中并被遍历,查询计划器只是显示如果没有结果会做什么

  • 在SQLite中,临时视图的处理方式与“真实”视图类似,而“真实”视图的处理方式不同。 同一视图的两个实例永远不会合并(除非它们展平到外部查询中)


    解释查询计划输出说谎是没有意义的。

    好的。所以它走了两次。谢谢