在sqlite (特别是第3版)中,是否应该在事务中运行分析?
如果是这样的话,而且我正处于一个进行了大量更改的长事务的末尾,那么在同一个事务中运行分析可以吗?还是应该首先提交该事务并开始另一个事务来进行分析?
文献资料并没有用这种或那种方式谈论任何事情。
发布于 2014-04-19 09:22:40
ANALYZE从索引列中读取数据,并将统计信息写入某些内部表。这有点类似于以下查询:
INSERT OR REPLACE INTO sqlite_statXXX
SELECT 'MyTable', 'MyColumn', COUNT(*), AVG(MyColumn) FROM MyTable对每个索引列执行一次。
与向数据库写入少量数据的任何其他SQL语句一样,事务开销将比写入数据本身的实际工作量大得多。
在您的示例中,如果没有更改的统计数据,就没有必要使用更改过的数据,所以您也可以在同一个事务中进行分析。
如果数据库太大,以致于分析运行了很长一段时间,那么将其执行推迟到与更重要的事务不发生冲突时再执行可能是有意义的。
https://stackoverflow.com/questions/23163380
复制相似问题