我对性能和数据库有疑问。我使用的是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 = ;
谢谢你们
答案 0 :(得分:1)
内置查询优化器应该为您解决此问题。但是,是的,如果查询未经优化,评估顺序会因短路而影响性能。
答案 1 :(得分:0)
如果您的数据库设置正确以收集有关表内容的统计信息,那么您的查询优化器应该能够轻松找出每个子条款的基数,并首先处理那些最能减少数据集的基数(最高基数)。基数可以被认为是列中有多少个唯一值。
例如,如果有一百万个不同的TypeContent
值但isPublished
只有0或1,则查询优化器应首先处理TypeContent
子句。
但这就是为什么数据库调优不是一种“一劳永逸”的操作。数据库的性能取决于架构,和表中保存的数据。这意味着过时的,不正确的统计数据实际上比没有统计数据更糟糕。至少如果没有统计数据,优化者就不会费心去使用它们。
如果数据属性定期更改,则应定期调整。有关SQL Server 2008特定统计信息以及如何创建和维护它们,请参阅here。