SQL:实际行数差异

时间:2011-08-22 15:47:43

标签: sql sql-server sql-server-2008 sql-execution-plan

  

可能重复:
  How does SQL server work out the estimated number of rows?

我只是在查看SQL Server图形执行计划,我遇到了以下两个信息:

  1. 实际行数-2385
  2. 估计行数-180
  3. 我想知道为什么会出现这种差异。你能解释一下他们之间的区别吗?如果你能用一些例子来解释它会很有帮助。

    感谢。

2 个答案:

答案 0 :(得分:6)

行估算基于统计数据。不准确的估计可能来自许多因素:

  • 您的数据或统计信息中的基数低
  • 过时或不完整的统计数据
  • 低效的执行计划
  • 并发问题(从创建执行计划到执行时间的数据变化)

通常,在遇到问题之前不要担心。

我的经验,最常见的是基于统计数据中的基数。

如果您基于两个都有索引的字段进行选择,则行估计将基于相应索引中值的可能性乘以行总数。

答案 1 :(得分:2)

我不太了解SQL Server,所以这是一个有根据的猜测:关于表的统计数据实际数据之间存在差异在表中。

数据库保存有关表的统计数据,优化程序可以使用这些数据来查找要执行的SQL的最佳(最便宜)查询计划。这些统计数据包括例如总行数和跨列数据的分布(例如,字段'gender'包含60%值'm'和40%值'f')。你可能在这里看到的是,统计数据已经过时,优化程序完成的计算因此会进入:优化器假设结果包含180行,但实际上(执行查询时)它返回2385.尝试更新统计信息(不知道SQL服务器中的确切语法),看看是否会改变数字。

相关问题