SqlServer 大量数据热汇总优化整理

SqlServer 大量数据热汇总优化整理,第1张

概述一、大量数据热汇总查询优化 查询性能提升方式: 1.为汇总查询列创建非聚集索引,索引很大的方面提升查询性能 2.尽量避免分组汇总,解决方法将分组汇总改成多次查询 3.使用多线程或者或者说多任务,对汇总查询性能并没有提升。 二、 *** 作示例,测试数据基数20万 1.分组查询代码 public IEnumerable getSummaryTotalDataSourceByCode(out int tota

一、大量数据热汇总查询优化

查询性能提升方式:

1.为汇总查询列创建非聚集索引,索引很大的方面提升查询性能

2.尽量避免分组汇总,解决方法将分组汇总改成多次查询

3.使用多线程或者或者说多任务,对汇总查询性能并没有提升。

二、 *** 作示例,测试数据基数20万

1.分组查询代码

public IEnumerable getSummaryTotalDataSourceByCode(out int total,int _start,int pageSize){    var query = DB.Fin_Info.Where(a => a.IsSettlement == true)        .GroupBy(a => new { a.MemberID,a.MemberCode,a.Nickname })        .Select(a => new        {            a.Key.MemberCode,a.Key.MemberID,a.Key.Nickname,报单费 = a.Where(p => p.Typename == "报单费").Sum(p => p.Amount),见点奖 = a.Where(p => p.Typename == "见点奖").Sum(p => p.Amount),推荐奖 = a.Where(p => p.Typename == "推荐奖").Sum(p => p.Amount),层奖 = a.Where(p => p.Typename == "层奖").Sum(p => p.Amount),对碰奖 = a.Where(p => p.Typename == "对碰奖").Sum(p => p.Amount),团队奖 = a.Where(p => p.Typename == "团队奖").Sum(p => p.Amount),级差奖 = a.Where(p => p.Typename == "级差奖").Sum(p => p.Amount),全球奖 = a.Where(p => p.Typename == "全球奖").Sum(p => p.Amount),小计 = a.Sum(p => p.Amount),手续费 = a.Sum(p => p.Poundage),实际金额 = a.Sum(p => p.RealAmount)        });    var data = query.OrderByDescending(a => a.MemberCode).Skip(_start).Take(pageSize).ToList();    total = data.Count;    if (data.Count >= pageSize)    {        total = query.Count();    }    return data;}
测试结果:

//按会员统计分页/*    * 创建MemberID索引前                创建MemberID索引后          * 调试状态:执行时间大约5秒左右     大约4秒多    * 非调试状态:3秒多                 大约3秒多    */Stopwatch watch = new Stopwatch();watch.Start();//获取分页数据int total = 0;IEnumerable List = DB.Fin_Info.getSummaryTotalDataSourceByCode(out total,10);Console.Writeline(List.ToJsonLongDate());watch.Stop();Console.Writeline($"总共执行秒数:{watch.Elapsed.TotalSeconds}");


2.优化处理代码:

public IEnumerable getByCode(out int total,int pageSize){    //1.会员表获取会员分页    List<Member_Info> memberList = null;    var memberquery = DB.Member_Info.Where();    memberquery = memberquery.Where(q => q.IsActive == "已激活");    //分页    total = memberquery.Count();    memberList = memberquery.OrderByDescending(q => q.CreateTime)        .Skip(_start)        .Take(pageSize)        .ToList();    //2.汇总会员的奖金    List<object> List = new List<object>();    var query = DB.Fin_Info.Where();    query = query.Where(q => q.IsSettlement == true);    foreach (var item in memberList)    {        var a = query.Where(q => q.MemberID == item.MemberID);        List.Add(new        {            MemberCode = item.Code,MemberID = item.MemberID,Nickname = item.Nickname,实际金额 = a.Sum(p => p.RealAmount)        });    }    return List;}
测试结果 
//按会员统计分页/* 创建MemberID索引前   创建MemberID索引后    * 调试状态:4秒多      大约2秒多    * 非调试状态:2秒左右   大约0.4秒    */Stopwatch watch = new Stopwatch();watch.Start();//获取分页数据int total = 0;IEnumerable List = DB.Fin_Info.getByCode(out total,10);Console.Writeline(List.ToJsonLongDate());watch.Stop();Console.Writeline($"总共执行秒数:{watch.Elapsed.TotalSeconds}");

三、其他实例 ,包含按日期汇总查询



更多:

EF Attatch()方法附加对象

EF批量 *** 作数据之EntityFramework.Extended

EF 汇总函数使用注意事项Max()/Min()等

总结

以上是内存溢出为你收集整理的SqlServer 大量数据热汇总优化整理全部内容,希望文章能够帮你解决SqlServer 大量数据热汇总优化整理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存