zoukankan      html  css  js  c++  java
  • 代码性能优化-----减少数据库读取次数

    对于从相同数据源读取不同要求的数据,可以只读取一次数据库,用linq进行数据的分类。

    数据库示例:

    --优化前读取7此数据库
    SELECT COUNT(DISTINCT p) FROM aa WITH(NOLOCK) WHERE DateDiff(dd, c, getdate())=0
    SELECT COUNT(DISTINCT p) FROM aa WITH(NOLOCK) WHERE DateDiff(dd, c, getdate())=1
    SELECT COUNT(DISTINCT p) FROM aa WITH(NOLOCK)
    SELECT SUM(at) FROM aa WITH(NOLOCK) WHERE s=30
    SELECT MAX(at) FROM aa WITH(NOLOCK) WHERE s=30
    SELECT SUM(at) FROM aa WITH(NOLOCK) WHERE s=10
    SELECT SUM(at) FROM aa WITH(NOLOCK) WHERE s=30 and d=1
    
    --优化后读取一次数据库
    SELECT at,s,d,p,c FROM aa WITH(NOLOCK)

    获取数据示例:

           //代码优化读7次数据库,改为读一次数据库
                var tempt = RB.GetAA(Config.ConStrRead);
                if (tempt != null&& tempt.Rows.Count>0)
                {
                    var enumer = tempt.AsEnumerable();
                    var todayPhones= enumer.Where(m => SlConvert.TryToDateTime(m["c"]) >= DateTime.Today).Select(m => SlConvert.TryToInt64(m["Phone"]));
                    outModel.TodayRecv = todayPhones.ToList().Distinct().Count();
    
                    //var yesterdayPhones = enumer.Where(m => SlConvert.TryToDateTime(m["c"]) >= DateTime.Today.AddDays(-1)).Select(m => SlConvert.TryToInt64(m["Phone"]));
                    //outModel.YesterdayRecv = yesterdayPhones.ToList().Distinct().Count();
    
                    var totalPhones = enumer.Select(m => SlConvert.TryToInt64(m["p"]));
                    outModel.TotalRecv = totalPhones.ToList().Distinct().Count();
    
                    var cashed = enumer.Where(m => SlConvert.TryToInt32(m["s"]) == 30).ToList();
                    var cashedAfterTaxMoney = cashed.Select(m => SlConvert.TryToInt64(m["at"])).ToList();
                    outModel.TotalSaveMoney = cashedAfterTaxMoney.Sum();
    
                    //outModel.ServerMoneyAll = cashed.Where(m => SlConvert.TryToInt32(m["d"]) == 1).Select(m => SlConvert.TryToInt64(m["at"])).Sum();
    
                    outModel.MaxRedBagMoney = cashedAfterTaxMoney.Max();
    
                    outModel.RestRedBagMoney = enumer.Where(m => SlConvert.TryToInt32(m["s"]) == 10).Select(m => SlConvert.TryToInt64(m["at"])).Sum();
                }
  • 相关阅读:
    CentOS 7中为Yum设置代理
    在 .NET Core项目中使用UEditor图片、文件上传服务
    Android开发:通过 webview 将网页打包成安卓应用
    ElasticSearch:组合查询或复合查询
    ElasticSearch:常用的基础查询与过滤器
    SpringBoot:Java High Level REST Client 搜索 API
    SpingBoot:整合Elasticsearch7.2.0
    Linux:oracle11.2.0dbca静默建库
    Docker:跨主机通信
    Mysql无法启动情况下,如何恢复数据?
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/6213939.html
Copyright © 2011-2022 走看看