有没有办法强制SQL Server在查询中使用最近数据的样本?

问题描述:

据我所知,SQL Server根据表数据样本估计基数。我们有一个每日付款调节报告,间歇性地产生一个不好的执行计划。有没有办法强制SQL Server在查询中使用最近数据的样本?

从我可以告诉这是由于计划中的坏基数估计部分。我想知道是否有办法强制查询来生成它用来做基数估计的样本,并偏向于最近插入/更新的行或更高的数字主键(又名新近)。

如果有办法在表级或数据库级别执行此操作,我也会对此感兴趣。

+2

利用期权来指导SQL Server的进入产生的最佳方案。 –

+0

https://docs.microsoft.com/en-us/sql/t-sql/queries/option-clause-transact-sql – scsimon

+1

索引统计信息是否过时? – HABO

看看“参数嗅探”和SQL中的OPTIMIZE FOR功能。它可以让你调整SQL的方式生成一个查询计划重新使用,可变码(视图,TVFs等):

SELECT * 
FROM ImportLog 
WHERE StateCode = @StateCode 
OPTION(OPTIMIZE FOR (@StateCode = 'CA'));