原因:
联查了有大表
改进:
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