执行sql同时查询执行计划,里面有一个Estimated Number of Rows。
网上查了一下,说是运算符生成的行数
但我多次查询(在不同的时间),Estimated Number of Rows返回的结果不一样。这是为什么?
想请问大侠们,有谁知道这个是跟什么有关?为什么同一个sql语句两次结果不一样?
急,在线等!sqlserverEstimatedRows

解决方案 »

  1.   

    统计信息绝大部分情况下、默认情况下,都是又sqlserver自己创建和维护,但是有一种情况第一次执行语句的时候,sqlserver发现统计信息过时,但是为了不影响运行,所以这一次不做任何操作,然后等运行完毕之后,再后台更新统计信息,第二次执行的时候,就有可能不一样。
    你执行多几次,看看后面几次是不是一样的?
      

  2.   

    右键你的数据库,然后点属性,再看看我图中这个选项是否为true
      

  3.   

    看了属性那个选项是false。
    我刚做了一个实验,一开始执行检索,Estimated Number of Rows:141.915
    然后在检索的表上面加了一个index,再执行,Estimated Number of Rows:147.265
    但是我把index删掉以后,再怎么执行,一直都是147.265了。
    这是为什么啊?
      

  4.   

    那加了索引,Estimated Number of Rows这个值变了,是正常的吗?(同一sql同一数据库的情况下)。
    为什么会变?什么情况下加了索引还是不变呢?
      

  5.   

    统计信息足够新的时候不会变,有些时候统计信息会过时。加了索引会强制sqlserver更新这个列的统计信息
      

  6.   

    统计信息统计的到底是什么啊?跟数据量有关系吗?怎么去判断统计信息是否过时呢?
    Estimated Number of Rows的话不应该是行数吗?照理讲,我数据不动的话,统计信息也不会变啊。
      

  7.   

    统计信息是很重要的东西,sqlserver其实先看统计信息,然后再分析用什么索引和什么表关联条件等等,三言两语很难说清楚,可以看看我的文章或者联机丛书的介绍http://blog.csdn.net/dba_huangzj/article/details/8041267
      

  8.   

    看了你的文章,知道了大概什么时候统计信息,但是还是有以下疑问:
    Estimated Number of Rows到底反映的是什么?跟查询结果的件数有关联吗?