Sql server 执行计划是否依赖于数据?

Sql server 执行计划是否依赖于数据?,sql-server,sql-server-2008-r2,sql-execution-plan,Sql Server,Sql Server 2008 R2,Sql Execution Plan,我运行SQL语句两次,包括“实际执行计划”。但是,对于同一个查询,我得到了两个不同的执行计划。唯一的区别是我换了身份证 首先,我运行ID为的sql,它只与5条记录相关。 其次,我运行ID为的sql,它与5000多条记录相关。 执行计划是否根据数据而变化 我正在使用SQLServer2008R2 执行计划是否根据数据而变化 严格地说,不会。如果查询更改或依赖于数据的统计信息更改,则执行计划将更改 如果数据发生变化,但统计数据没有变化,那么您的执行计划将保持不变。是!当然SQL Server将分析查

我运行SQL语句两次,包括“实际执行计划”。但是,对于同一个查询,我得到了两个不同的执行计划。唯一的区别是我换了身份证

首先,我运行ID为的sql,它只与5条记录相关。 其次,我运行ID为的sql,它与5000多条记录相关。 执行计划是否根据数据而变化

我正在使用SQLServer2008R2

执行计划是否根据数据而变化

严格地说,不会。如果查询更改或依赖于数据的统计信息更改,则执行计划将更改


如果数据发生变化,但统计数据没有变化,那么您的执行计划将保持不变。

是!当然SQL Server将分析查询中涉及的行数,并根据行数,它可能会选择一个或另一个执行计划,以尽可能优化所有案例查看已生成的执行计划-您应该注意到,每个节点都显示了估计的行数以及实际的行数-您认为这是关于什么的?您可以在使用相同的执行计划时获得实例,这是一件非常糟糕的事情,叫做参数嗅探。这基本上是乐观主义者感到困惑,并可能导致非常糟糕的性能。如果你感兴趣,谷歌上有很多关于这个主题的资源。请看Remus Rusanu的回答: