性能优化——SQL语句

    前段时间人事用户提出一个需求:在添加档案时,档案编号自动生成,但是生成的速度很慢。每次进入添加页面时,档案编号总是过几秒才会出来。然后用户要求,让编号在进入该页时就出现。

    刚看到这个问题时,就想到了可能是查询方法的问题。第一是查询过程中出现了差错;第二是从数据库中查数据花费的时间太长。有了思路,就下手去做吧。

    首先排除第一种想法,在添加信息时,需要进行查询的方法只有一个,查询出记录总数,然后生成新的档案编号。在跟代码的过程中,发现了用的sql语句存在一定的问题。如下:

public string QueryBasicFileID()
        {
            
            string sql = "select * from T_BasicInformation";
           
            List<T_BasicInformation> basicInfo = this.CurrentDal.LoadItems(sql).ToList();
          
            string countBasic = (basicInfo.Count + 1).ToString("000000");
           
            string id = DateTime.Now.ToString("yyyyMMdd") + " " + countBasic;
            return id;
        }
    看完这个方法会发现问题所在,第一是查询总数只需要使用count(*)方法即可,而这里用的是select *  ,这就意味着需要查询到所有的记录信息。从表面上我们可以知道select count(*) 与select * 的速度不一样,那么他们的差别究竟有多大呢?

    在sql Server中监测一下,看看两者的速度到底能够相差多少呢。

    首先使用“ select   *  ” :    

Declare @d Datetime Set @d=GETDATE()
select * from T_BasicInformation
select [花费时间]=DATEDIFF(ms,@d,GetDate())
     

     

     而“ select count(*)” 的执行如下:    

Declare @dd Datetime Set @dd=GETDATE()
select COUNT(*) from T_BasicInformation
select [花费时间]=DATEDIFF(ms,@dd,GetDate())
      

     通过两者相互对比发现他们的速度会相差至少500倍,当然从执行的结果来看,他们之间的相差也就不过是1秒,可能从直观上来看,相差并不大。但是,细心的会发现,在本系统中使用了底层框架,相对的来说使用底层之后,查询的速度相对于直接使用原生sql会有所降低,如果在加上在程序中运行和使用低效率的语句,那么其相差的速度就不是那1秒之差了。

     

   小结:

      看似相同的一行代码,在不同的环境中所产生的效果是不一样的。所以,任何时候,并不是将功能实现就行了。还需要从程序的性能和用户的体验度上进行考虑。如果只是功能上实现了,效率没有提上去,那么再好的程序也不会受到用户的喜爱。

     

转载于:https://www.cnblogs.com/victor-grace/p/7253759.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值