从现象上看大概率是碰到谓词越界的问题,条件里是大于某个时间点的开区间,导致有一部分时间点是落在收集统计信息之后。如果表收集完统计信息后,数据量变化很大的话,会导致modify_count值大,这样就会导致对开区间的数值估算过大,引发全表扫描。
关于谓词越界可以关注这些参数:
v7.4引入变量 tidb_opt_obiective 来让优化器忽略modify_count,这时越界估算的上界会使用选择率1/ndv(只考虑直方图部分数据)。
v8.1对越界传算又做了进一步优化https://github.com/pingcap/tidb/pull/50970