性能优化——SQL语句(续)

    上篇博客介绍了一下自己在项目中遇到的一种使用sql语句的优化方式(性能优化——SQL语句),但是说的不够完整。在对比的过程中,没有将max函数考虑在内,经人提醒之后赶紧做了一个测试,测试过程中又学到了不少的东西。现给大家分享一下

    上次用的是select count(*) 和select * 的执行效率问题,因为我的需求是获取数据的一个总数来自动给出新的id,然后网友给出可以使用max的方式给出新id。其实这也是一种不错的思路(当时我们也用过该函数,只不过因为系统数据本身问题,不适合用该函数),然后我就对max函数的性能做了一下测试。

    第一次测试:      

Declare @dddd Datetime Set @dddd=GETDATE()
select MAX(num) from T_BasicInformation
select [花费时间]=DATEDIFF(ms,@dddd,GetDate())
    测试结果:

     

     通过对比发现,使用该方法的执行效率貌似不如select count(*) 的效率高(当时测得的时间为3ms),那么事实真的是这样吗?后来查了一些资料,发现其实max的效率相对来说会更高,那么为什么我们的测试结果会是这样的呢?咱们接着进行测试


    第二次测试: 

      ①语句一    

Declare @ddd Datetime Set @ddd=GETDATE()
select MAX(id) from t_SellLogDetail
select [花费时间]=DATEDIFF(ms,@ddd,GetDate())
     测试结果:

       

     ②语句二      

Declare @dddd Datetime Set @dddd=GETDATE()
select MAX(foodId) from t_SellLogDetail
select [花费时间]=DATEDIFF(ms,@dddd,GetDate())
      测试结果:

      

     ③语句三     

Declare @ddddd Datetime Set @ddddd=GETDATE()
select MAX(orderId) from t_SellLogDetail
select [花费时间]=DATEDIFF(ms,@ddddd,GetDate())
     测试结果:

      

     

    做完第二次测试会发现,同样的表,不同的字段,其max函数执行效果就不一样。然后就从数据类型出发了,数据类型如下:

    

    这样的话,我们的测试结果不同问题就迎刃而解了,在max函数的执行过程中,会根据数据类型的不同而有不同的执行效率。如果是主键且为整型,其效率是最高的;而非主键时,int的效率又会高于字符类型。其实这些都很容易理解,各有各的使用方式。


    小结:

      第一次测试完之后就没有考虑其他的东西,后来又发现在max中还有一些需要注意的地方。所以,在我们平常的学习中,一定要学会拓展学习,不要仅仅限于自己想要的结果。得到结果固然是系统需要的,但是对于处于学习期的我们,这远远不够,我们要不断的探索,才能赢得更大的进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 76
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值