WHERE语句中的条件顺序可以提高性能吗?

时间:2010-08-18 05:54:08

标签: sql performance

我对性能和数据库有疑问。我使用的是MS SQL 2008。

我想知道,如果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 = ;

谢谢你们

2 个答案:

答案 0 :(得分:1)

内置查询优化器应该为您解决此问题。但是,是的,如果查询未经优化,评估顺序会因短路而影响性能。

答案 1 :(得分:0)

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

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

但这就是为什么数据库调优不是一种“一劳永逸”的操作。数据库的性能取决于架构,和表中保存的数据。这意味着过时的,不正确的统计数据实际上比没有统计数据更糟糕。至少如果没有统计数据,优化者就不会费心去使用它们。

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