pg中当一个执行时间很长的sql,没有运行完,这个时候发现统计信息过旧,如果我重新收集的话,正在运行的语句能使用到刚刚收集的统计信息吗?
不会用到最新的统计信息。这个技术在oracle19c里有,叫自适应执行计划,在sql运行过程中,如果发现统计信息太旧,会用真正的返回的数据行数改变执行路径,比如根据统计信息评估的执行计划走nest loop,那说明驱动表返回行数比较少,如果再运行过程中,发现驱动表返回的行数很多,那执行计划可能会变成hash join。在pg里还做不到这个。
赞