作者:syjs10 | 来源:互联网 | 2023-10-13 13:00
原因:
联查了有大表
改进:
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<&#39;2018-07-31 15:32:13&#39; AND add_time>&#39;2018-07-15 15:32:13&#39;
执行时间
改为
SELECT [id],[order_no],[trade_no]FROM [orders] WHERE datediff(dd,add_time,&#39;2018-07-31&#39;) >&#61; 0 AND datediff(dd, &#39;2018-07-01&#39;, add_time )>&#61; 0
还是很慢
加一张表联查&#xff0c;做为中间表&#xff0c;还是很慢&#xff0c;
SELECT [id],[order_no],[trade_no]from [orders] join [orderDateDiff]on [dt_orders].id&#61;[orderDateDiff].order_idwhere [orderDateDiff].[datediff]<15