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

今天在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列的正确排序结果,而效率更高。

                        而实际应用中并不一定这么巧合。

posted on   Ferry  阅读(11252)  评论(17编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
< 2009年7月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示