您的位置:首页 > 数据库 > SQL

Sql Server2005中获取表中某一列的最大值使用MAX和TOP-ORDER BY执行效率比较

2009-07-14 11:39 435 查看
今天在CSDN看到这样的一个帖子,于是用SqlServer2005查询分析器测试了一下。

测试之前,我个人认为是MAX,测试之后发现是TOP-Order BY

要求:获取表中某一数值列的最大值

语句:

1)select top 1 Number from pager order by Number desc
   2)select Max(Number) from pager

数据表:

1)Pager表,3列,20000行数据,其中ID是主键列、自增标识列,无其他索引

2)Pager2表,3列,20000行数据,其中ID是自增标识列,该表无主键列,无其他索引

执行:

1)使用Pager表 分别运行两条T-Sql语句4次

2)使用Pager2 表 分别运行两条T-Sql语句4次

下面开始:

1-1 Pager表: select top 1 Number from pager order by Number desc。下图中是使用主键列ID排序后的执行计划和客户端统计信息

执行计划



客户端统计信息



  1-2 Pager表: select Max(Number) from pager

执行计划



客户端统计信息


  2-1 Pager2表: select top 1 Number from pager2 order by Number desc

执行计划



客户端统计信息



  2-2 Pager2表: select Max(Number) from pager2

执行计划



客户端统计信息


从这些数据结果来看:

1)使用Pager表,大数据量时Top-Order by语句的执行效率优势相当明显

2)使用Pager2表时, Top-Order by语句的执行效率依然有明显的优势

不当之处,欢迎指正!

-------------谢谢指正!

补充1): 在使用Pager表时,由于排序列使用了ID(主键),所以从数据上看效率很高;但实际排序列应该是Number,此时效率要降低不少。

其实,在做这个测试的时候,我是循环往表中Number列插入1到20000,所以在此表中ID列的排序也是Number列的正确排序结果,而效率更高。

而实际应用中并不一定这么巧合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐