• 代码性能优化-----减少数据库读取次数


    对于从相同数据源读取不同要求的数据,可以只读取一次数据库,用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();
                }
  • 相关阅读:
    【vim】 match手动设置想高亮的关键字
    【git】add代码之前查看大致修改代码量
    语法错误和语义错误区别
    PIL安装方法
    dlib的安装
    python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
    shape与reshape区别
    操作系统复习灭火思维导图
    sql语句模糊查询
    python中sort和sorted函数的区别
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/6213939.html
Copyright © 2020-2023  润新知