大数据量情况下查询性能低,耗时长的一种问题以及解决思路

Posted 露似真珠月似弓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据量情况下查询性能低,耗时长的一种问题以及解决思路相关的知识,希望对你有一定的参考价值。

背景交代: 1   mongodb 有500万条数据

                 2  经过过滤 还有20多万条数据

要得到上述20w条数据,一次查询得到20多万条,很可能会产生性能问题,于是同事用for循环,每次查询1000条数据,下一次skip 1000条,take 1000条。导致性能及其低下,早上请求,下午才获得完整数据。

 

解决方法思路是将1000改成5000

 

原因: 

第一次 取1000

第二次 先数完前1000行 再取1000

第三次 先数完前2000行 再取1000

 

 

...

第二百次 数完199000 再取1000

这样数了(1000+199000)+(2000+198000)+...=100*200000=2000 0000次  = 两千万次

 

如果是5000的话

数了 40/2*5000=20*5000=10 0000=十万次

 

两者相差200倍

 

这是比较的数行数的差距,另外读数据到内存,每次1000行得到的list 要union 200次,每次5000行得到的list 要union40次。

5000是举的例子,在不发生内存异常的情况下 我觉得越大越好

以上是关于大数据量情况下查询性能低,耗时长的一种问题以及解决思路的主要内容,如果未能解决你的问题,请参考以下文章

SQL性能问题.现在表设计可以把一个大表按类型(各类型字段不相同)拆分成多个小表.拆分后比较方便.

Hive性能优化

ES大数据量下的查询优化

避免缓存中出现脏数据分析

[SQL] - 报表查询效率优化

Intern Day91