工作中存储过程优化中发现的一些问题。

NO.1: Where条件的某些字段未建立索引。

NO.2: 精简SQL语句。执行时间相差无几的2条Select语句,在Insert into时,执行效率相差N倍。ex: insert into Tmp_table select a.id from T1 a left join (select id,aid from T2 where type=12)b on a.id =b.aid left join T2 c on b.id=c.id;
     insert into Tmp_table select a.id from T1 a left join (select id,aid from T2 where type=12)b on a.id =b.aid;
     单运行select语句执行时间几乎一样,但把select语句的数据insert into到表时,执行时间相差5倍以上。

NO.3: 未在临时表建立索引。
ex:特别是一些数据量大的临时表,必须要建立索引。

 

NO.4: SQL语句中出现子句的情况。特别是数据量大的子句,建议用临时表来存储子句的数据,然后在临时表建立索引后,在SQL语句中使用临时表。
ex:select a.id from T1 a left join (select aid from T2)b on a.id =b.aid.
    改为: CREATE TABLE Tmp_t(aid int not null);
          insert into Tmp_t select aid from T2;
          CREATE NONCLUSTERED INDEX [ix_aid] ON Tmp_t ([aid] ASC);
          select a.id from T1 a left join Tmp_t b on a.id=b.aid;
          drop table Tmp_t;

 

NO.5: 时间格式化问题。

ex:  declare @FromDate datetime;
     declare @ToDate datetime;
     select id from T1 WHERE Createtime between @FromDate and @ToDate;
     如果 @FromDate='2010-10-01',@ToDate='2010-12-01'.执行效率非常高。但如果是@FromDate='2010-10-01 18:00:00',@ToDate='2010-12-01 18:00:00'时相差100倍。
     必须Convert对datetime日期数据转换
     select id from T1 WHERE Createtime between CONVERT(VARCHAR(30),@FromDate,120) and CONVERT(VARCHAR(30),@ToDate,120);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值