内容摘要:关于T-SQL过滤运算符的流行经验法则确实不少,但却不能够尽信,相反我们应该对自己的选择做出确切的评价。
此外,当我们将要选择运算符时,还有一个重要因素需要考虑,那就是索引。如果某个适当的索引可用时,SQL Query Optimizer通常会用该索引去执行索引查找操作。如果没有可用索引,或索引不是最适合的,那数据库必须先执行表扫描或索引扫描,这样尤其会导致性能下降。不过,如果被查询的表包含的行比较少,那表扫描或索引扫描执行起来确实会比索引查找要快。当评价执行计划时,我们必须要考虑这些条件。
评价执行计划
类似于“EXISTS逻辑运算符比IN逻辑运算符更好用”这类大而化之的评价常常会左右我们的思维。在决定选择哪个运算符的时候,我们不能单纯地把某人的教条当圣经来用。更好的做法是评价执行计划,以便为数据库测试我们在其中编写的查询。执行计划为我们揭示是否了执行表扫描或索引扫描,并阐明该查询各步骤的相对性能情况。
我们可以使用Enterprise Manager 中的Query Analyzer工具(SQL Server 2000)或者通过SQL Server Management Studio(SQL Server 2005)来查看执行计划。
测试样本查询
为了更好地阐明测试过程,本文将以AdventureWorks样本数据库为例,通过不同的变化设置来测试一个用来检索三个特定产品销售细节的查询。我们需要准备以下的测试环境:SQL Server 2005标准版、SQL Server Management Studio、SQL Server Profiler和AdventureWorks样本数据库。假设查询的结果会在一个网页应用程序的GridView对象中显示。当页面应用程序处于回传状态时,该GridView对象就会开始组建;因此,必须快速执行查询,而且执行的频率也要很高(假设这是一个访问率很高的网站)。
本例用三个常数硬编码的ProductID值来过滤查询。
ProductID = '762'
来源:IT专家网 作者:cyw 责编:豆豆技术应用