在事务中使用时,ANALYZE 会做什么?
What does ANALYZE do when used within a transaction?
假设我 inserting/updating/deleting 批量处理大量行(最少 100k,最多 20M),这些行必须是原子的。
将在同一事务中每隔 10-100k 次操作暂停到 运行 ANALYZE
实际上会通知查询计划程序任何事情,因为此事务所做的更改尚未提交?
从逻辑上讲,假设客户正在做这样的事情:
BEGIN;
(for i, record in records)
INSERT ...
DELETE ...
UPDATE ...
(if i % 10000 == 0)
ANALYZE;
(end)
(end loop)
COMMIT;
ANALYZE
是否会对 运行ning 事务 的查询规划器有任何好处,还是它只会收集已提交行的统计信息?
ANALYZE 将看到先前在同一事务中所做的更改。但是只有同一个事务才会使用那些新收集的统计信息。其他事务将继续使用先前的统计信息(直到大型事务提交,然后它们将获取包含 now-committed 行的新统计信息)。
假设我 inserting/updating/deleting 批量处理大量行(最少 100k,最多 20M),这些行必须是原子的。
将在同一事务中每隔 10-100k 次操作暂停到 运行 ANALYZE
实际上会通知查询计划程序任何事情,因为此事务所做的更改尚未提交?
从逻辑上讲,假设客户正在做这样的事情:
BEGIN;
(for i, record in records)
INSERT ...
DELETE ...
UPDATE ...
(if i % 10000 == 0)
ANALYZE;
(end)
(end loop)
COMMIT;
ANALYZE
是否会对 运行ning 事务 的查询规划器有任何好处,还是它只会收集已提交行的统计信息?
ANALYZE 将看到先前在同一事务中所做的更改。但是只有同一个事务才会使用那些新收集的统计信息。其他事务将继续使用先前的统计信息(直到大型事务提交,然后它们将获取包含 now-committed 行的新统计信息)。