当前位置:坤哥网-kwan-一次数据统计优化记录

一次数据统计优化记录

2019/6/19 11:06:09 IT综合阅读(99) 评论(0)


场景描述:

  1. 从 A 库里的表 BlackCallLog 取出大概 20万条记录,直接在 sql management studio 查询用时 4秒。

  2. 从 B 库里的表 Black 里取出有 1009617 条记录,大概100万,直接在 sql management studio 查询用时10秒。


BlackCallLog 主要字段有 ResaonType(类型),IdNo(身份证号),一个身份证可以有多个类型,将所有数据从数据库中取出放在List集合中 blackCallLogList。

Black主要字段 IdNo(身份证号),将所有数据从数据库中取出放在List集合中 blackList。

现在需要找出 blackCallLogList 集合中身份证号在 blackList 中存在的记录数。

var blackList_ids = blackList.Select(v => v.IdNo).ToList();
var result = blackCallLogList.Where(x => blackList_ids.Contains(x.IdNo));
int count=result.Count();

运行前,占用资源如下:

d395bf32-7b12-450f-bed3-d9ad2a0621f2.png


现在开始运行,在获取 blackCallLogList 前占用资源如下:be0ae950-2fae-48dd-803c-1815cb91f500.png

从数据库中拿到数据后:a1f9f4fd-dd08-4ee7-a24b-f1c711b0f9ab.png

再去取  blackList,取完后:7fa78367-d78c-4640-8fbd-234430cfbb32.png

先将 blackList 的 IdNo 取出来,即 

var blackList_ids = blackList.Select(v => v.IdNo).ToList();

之后,变化不大:

4edd58c9-3e7b-4952-bdd6-8b10b704f70c.png

开始执行 var result = blackCallLogList.Where(x => blackList_ids.Contains(x.IdNo)); 后资源占用没什么变化。

44e6f14c-a504-4b5f-b212-994cd9a22680.png

当执行 int count=result.Count() 后:

63991da6-f5f3-4348-b7e6-502d275bec08.png

单步执行,程序一直卡在这一步,cpu一直占用 百分之四十上下。


2019-06-19 10:55:43,284  执行到这1步,执行完成之后,时间是 11:53 左右。


使用 SortedList 将 blackList 的结果存起来:

SortedList<string, int> sortedList = new SortedList<string, int>();
var vcreditBlackInfoList_ids = blackList.Select(v => v.IdentityID).ToList();
foreach (var item in vcreditBlackInfoList_ids)
{
    sortedList.Add(item, 0);
}
var result = blackCallLogList.Where(x => sortedList.Keys.Contains(x.IdentityNo));

这样速度很快,不会卡住。


还有其他方式优化待研究。


附录


使用 Ling 报计算超时:

c7ec4901-30cf-48ae-bd06-9032a8a98f07.png


a88dd44f-296e-4faf-bde5-37f1cf997b09.png


分类: 优化

发表评论 没有账号,注册评论