MVCC 在 ANALYZE 后不重新装入规划器统计
作者: jussisaurio创建于 2026年9月17日更新于 2026年9月17日
标签mvccoptimizer
□ 问题
在MVCC模式中,ANALYZE'写作sqlite stat1',但没有更新关于同一联系的规划者统计数据。
后来的语句使用默认行估计. 这种行为可以选择更昂贵的查询计划.
WAL模式在同一个 " ANALYZE " 语句后重新装入统计数据。
□再现.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? PRAGMA 日记 mode=mvcc; CREATE T(INTEGER PRIMERIY,价值INTEGER);
(n) 改为 评价(1) 联 合 国 自有n + 1 从下至下 (中文(简体) ). (b) 插入自下而上;
安娜丽兹;
SELECT tbl, idx, stat from sqlite stat1 ; 电站: 电站: 快速计划格式=JSON本身 从t;
`sqlite stat1' 包含正确的行数:
页:1
t||100该计划仍然使用默认估计:
贾森 "rows per input":1000, (中文(简体) ). "输出-行数":1000000
没有MVCC,同样的声明使用新的统计:
贾森
"rows per input":100, (中文(简体) ).
"输出 rows": 100□因缘.
声明:步骤()'在ANALYZE ' 完成后称为`重新 分析 数据()'。
当连接有“ 交易国: 写入” 时, 刷新返回 。 MVCC连接在当时仍然有这个状态.
因此,`schema.analysis stats'保持了旧值。
相关代码:core/stats.rs.
□ 预期行为
在自动承诺`ANALYZE ' 语句之后,规划者必须使用新的统计数据来进行关于同一连接的下个语句。
MVCC和WAL必须在此例子中报告100行的估计.
□ 建议的测试
增加一个运行“ANALYZE”的MVCC SQL测试,并在下一个计划中检查行估计数.
内容来源: tursodatabase/turso