WEB开发网
开发学院数据库MSSQL Server SQL 2005之四种排名函数 阅读

SQL 2005之四种排名函数

 2010-10-01 10:25:30 来源:WEB开发网   
核心提示: 本节所讲到排序函数的重要好处之一是它们的效率,SQL Server 的优化程序只需要扫描数据一次,SQL 2005之四种排名函数(4),以便计算值,它完成该工作的方法是:使用在排序列上放置的索引的有序扫描,而 SQL Server 2000 查询的性能恶化是指数性的,即使是在相当小的表中,或者

本节所讲到排序函数的重要好处之一是它们的效率。SQL Server 的优化程序只需要扫描数据一次,以便计算值。它完成该工作的方法是:使用在排序列上放置的索引的有序扫描,或者,如果未创建适当的索引,则扫描数据一次并对其进行排序。

另一个好处是语法的简单性。为了让您感受一下通过使用在 SQL Server 的较低版本中采用的基于集的方法来计算排序值是多么困难和低效,请考虑下面的 SQL Server 2000 查询,它返回与上一个查询相同的结果:

SELECT (SELECT COUNT(*)   FROM SpeakerStats AS S2 
          WHERE S2.score > S1.score   
          OR (S2.score = S1.score  AND S2.pctfilledevals > S1.pctfilledevals)   
          OR (S2.score = S1.score  AND S2.pctfilledevals = S1.pctfilledevals     AND
       S2.numsessios > S1.numsessions)   
          OR (S2.score = S1.score  AND S2.pctfilledevals = S1.pctfilledevals     AND
      S2.numsessions = S1.numsessions         AND S2.speaker < S1.speaker)
            ) + 1 AS rownum
            , speaker, track, score, pctfilledevals, numsessions
            FROM SpeakerStats AS S1
            ORDER BY score DESC, pctfilledevals DESC, numsessions DESC, speaker

该查询显然比 SQL Server 2005 查询复杂得多。此外,对于 SpeakerStats 表中的每个基础行,SQL Server 都必须扫描该表的另一个实例中的所有匹配行。对于基础表中的每个行,平均大约需要扫描该表的一半(最少)行。SQL Server 2005 查询的性能恶化是线性的,而 SQL Server 2000 查询的性能恶化是指数性的。即使是在相当小的表中,性能差异也是显著的。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:SQL 排名 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接