1. 程式人生 > >大資料量情況下查詢效能低,耗時長的一種問題以及解決思路

大資料量情況下查詢效能低,耗時長的一種問題以及解決思路

背景交代: 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是舉的例子,在不發生記憶體異常的情況下 我覺得越大越好