有没有办法强制SQL Server在查询中使用最近数据的样本?
问题描述:
据我所知,SQL Server根据表数据样本估计基数。我们有一个每日付款调节报告,间歇性地产生一个不好的执行计划。有没有办法强制SQL Server在查询中使用最近数据的样本?
从我可以告诉这是由于计划中的坏基数估计部分。我想知道是否有办法强制查询来生成它用来做基数估计的样本,并偏向于最近插入/更新的行或更高的数字主键(又名新近)。
如果有办法在表级或数据库级别执行此操作,我也会对此感兴趣。
答
看看“参数嗅探”和SQL中的OPTIMIZE FOR
功能。它可以让你调整SQL的方式生成一个查询计划重新使用,可变码(视图,TVFs等):
SELECT *
FROM ImportLog
WHERE StateCode = @StateCode
OPTION(OPTIMIZE FOR (@StateCode = 'CA'));
利用期权来指导SQL Server的进入产生的最佳方案。 –
https://docs.microsoft.com/en-us/sql/t-sql/queries/option-clause-transact-sql – scsimon
索引统计信息是否过时? – HABO