个人笔记-分析程序变慢原因

原因:

联查了有大表

改进:

1 联查字段加索引

2 排序字段加索引

3 加统计表

4 冷热数据

5 in改为exists

2018 7 /26

发现变慢原因:

1 联查表是大表,大表不能用in,只能用exists

2 提前从in 里面筛选出在主表bu'm不满足条件的数据

INQ里面  

如果有个从表很大并且 需要筛选  又和主表有关联关系,并且不想读取从表信息。

源代码:li包含了所有

  ll = coupon.Select(y => y.Cid).ToList();
               var model =act.Where(o =>  ll.Contains(o.ID)&&Type=2);

因为 coupon超级大,运行超级慢

改代码:

  ll = coupon.where(act.Any(o => o.type=2).Select(y => y.Cid).ToList();
                var model = act.Where(o => ll.Contains(o.ID));

把条件提前加入筛选集合里面,运行很快

 

加索引,主要是where 或者orderby自己认为标准: 

1 联查大表的字段,大表的字段加索引

2 排序的字段

3sum的字段

3 不是所有条件字段加索引

 

 时间筛选不能直接用大于小于,用函数来写

SELECT      [id]
      ,[order_no]
      ,[trade_no]
  FROM  [orders] WHERE add_time<'2018-07-31 15:32:13'  AND add_time>'2018-07-15 15:32:13' 

执行时间

改为


SELECT      [id]
      ,[order_no]
      ,[trade_no]
  FROM  [orders] WHERE  
  datediff(dd,add_time,'2018-07-31') >= 0 AND datediff(dd, '2018-07-01', add_time )>= 0

还是很慢

加一张表联查,做为中间表,还是很慢,

SELECT        [id]
      ,[order_no]
      ,[trade_no]
  from  [orders]  
  join [orderDateDiff]
  on [dt_orders].id=[orderDateDiff].order_id
  where [orderDateDiff].[datediff]<15

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值