我正在探索 SQL Server 中的优化器,特别是直方图,我看到了一些奇怪的结果。
如果我执行下面的查询,我知道字段上没有直方图,SQL Server 会输出一个行估计值,等于实际结果。如果我要在我使用的地方运行相同的查询DECLARE @i NUMERIC(19,2) = 30.0而不是常量WHERE [Rate] < @i,那么估计值94.8与我对显示的查询的期望一样,因为数据库没有关于该字段的统计信息。
所以我的问题是为什么 SQL Server 在没有该字段的统计信息时输出正确的结果?
当AUTO_CREATE_STATISTICS按照我的回答所示关闭时,我在行估计中遇到了一些奇怪的行为。
表上存在一个约束,限制[Rate]在 之间6.5 - 200.0。估计取决于如果在实验时有很大的差异>,使用或>=以及24.0或64格式的查询,其中谓词表示隐式转换输入money。
对于WHERE [Rate] > 6.5估计值28.44,然后以高于 的速率停止100。
对于WHERE [Rate] > 7排除小数的地方,28.44估计一直运行到255
对于WHERE [Rate] >= 6.5该28.44估算使用长达约100然后改到17.7764多达1000之前估计下降到1。
所以似乎没有太多的一致性。似乎 …