2010-08-18 93 views
1

我有一个关于性能和数据库的问题。我使用MS SQL 2008.WHERE语句中的条件顺序可以提高性能?

我想知道,如果WHERE语句中的条件顺序可能会增加或减少SELECT操作的性能。 例子:

WHERE cnt.IsPublished = 1 
AND cnt.TypeContent = 'AR' 
AND cnt.ModeContent = 'AP' 
AND cnt.CategoryId = '7'; 

dfdfd

WHERE cnt.CategoryId = '7' 
AND cnt.TypeContent = 'AR' 
AND cnt.ModeContent = 'AP' 
AND cnt.IsPublished = ; 

谢谢你们

回答

1

内置的查询优化器应该照顾这对你。但是,是的,如果查询未被优化,则评估顺序会由于短路而影响性能。

0

如果您的数据库设置正确以收集表格内容的统计信息,那么您的查询优化器应该能够轻松找出每个子条款的基数,并首先处理那些最能减少数据集(最高基数)的数据集。基数可以被认为是一列中有多少个唯一值。

例如,如果有一百万个不同的TypeContent值,但isPublished只有0或1,则查询优化器应首先处理TypeContent子句。

但是这就是为什么数据库调优不是“一劳永逸”的操作。数据库的性能取决于模式,和表中保存的数据。这意味着过时的,不正确的统计数据实际上比没有统计数据更差。至少在没有统计数据的情况下,优化器不会使用它们。

如果数据属性定期更改,则应定期调整。有关SQL Server 2008的特定统计信息,请参阅here,以及如何创建和维护它们。