大資料量情況下查詢效能低,耗時長的一種問題以及解決思路
背景交代: 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是舉的例子,在不發生記憶體異常的情況下 我覺得越大越好
相關推薦
大資料量情況下查詢效能低,耗時長的一種問題以及解決思路
背景交代: 1 mongodb 有500萬條資料 2 經過過濾 還有20多萬條資料 要得到上述20w條資料,一次查詢得到20多萬條,很可能會產生效能問題,於
Integer和int的比較,大資料量情況下造成頻繁gc的原因分析
很多基礎的知識,覺得沒用,所以沒有在意。當實際用到的時候,出現了不同於預想的結果,才會認真分析。 這是shell排序的程式碼 public long sort(Integer[] datas) { long start = System.currentT
C++標準模板庫中list大資料量情況下析構效率的研究
list在程式設計中是一種十分常用的序列式容器,如果你的程式更注重容器以下特性時,list可謂首選容器: 1、資料按原本順序儲存(不需要排序) 2、容器可以高效在任意位置插入、刪除資料 3、迭代器不會因插入與刪除等操作而失效(當然被刪除元素的迭代器除外) 4、不需要隨機訪問
ArcSDE for Oracle在大資料量執行建立統計資訊(Analyze)耗時長的問題
Article ID:42983Software: ArcSDE 10.1, 10.2, 10.2.1, 10.2.2 ArcGIS for Desktop Advanced 10.1, 10.2, 10.2.1, 10.2.2, 10.1 SP1, 10.3 ArcGIS
大資料量表的查詢優化及索引使用
一、對於運算邏輯,儘可能將要統計的各專案整合在一個查詢語句中計算,而不是用分組條件或分專案呼叫多個查詢語句,而後在程式碼裡計算結果。 二、查詢語句的優化,諸如不用"select *"、多表關聯查詢時新增別名於查詢欄位上、避免使用in、not in關鍵字、非去除重複時用union all替換uni
JDK8 switch使用字串比if else 效率高,親測大資料量資料下
for (TemplateFormVO templateFormVO:templateFormVOS){ formid=String.valueOf(templateFormVO.getFormId()); formId=templateFormVO.getFormI
MySQL大資料量分頁查詢方法及其優化 MySQL大資料量分頁查詢方法及其優化
MySQL大資料量分頁查詢方法及其優化 ---方法1: 直接使用資料庫提供的SQL語句---語句樣式: MySQL中,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N ---適應場景: 適用於資料量較少的情況(元組百/千級) --
大數據量情況下查詢性能低,耗時長的一種問題以及解決思路
可能 數據 問題 skip 思路 原因 for 內存 mongo 背景交代: 1 mongodb 有500萬條數據 2 經過過濾 還有20多萬條數據 要得到上述20w條數據,一次查詢得到20多萬條,很可能會產生性能問題,於是同事用fo
sparkStreaming+flume實現記憶體計算(小資料量情況下)
架構分析sparkStreaming一般結合kafka使用,但是如果你的資料量比較小,就可以不用搭建kafka叢集,那麼flume提供了兩種提供資料給sparkStreaming的方式一種是push,一種是Pull,Pull是sparkStreaming向flu
解決mongodb大資料量分頁查詢效率問題
最常見的分頁採用的是skip+limit這種組合方式,這種方式對付小資料倒也可以,但是對付上幾百上千萬的大資料,只能力不從心,skip如果跳過大量的資料會很慢,並且會越查越慢,針對這一情況,可以通過條件查詢+排序+限制返回記錄,即 邊查詢,邊排序,排序之後,抽取上一頁中的最後一條記錄,作為當前分
mongodb大資料量分頁查詢效率問題
最常見的分頁採用的是skip+limit這種組合方式,這種方式對付小資料倒也可以,但是對付上幾百上千萬的大資料,只能力不從心,skip如果跳過大量的資料會很慢,並且會越查越慢。 //程式碼大概看下意思就行了 const list = db.getCollection('se
MySQL大資料量分頁查詢方法及其優化 ---方法1: 直接使用資料庫提供的SQL語句 ---語句樣式: MySQL中,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N ---適
測試實驗 1. 直接用limit start, count分頁語句, 也是我程式中用的方法: select * from product limit start, count 當起始頁較小時,查詢沒有效能問題,我們分別看下從10, 100, 1000, 10000開始分頁的執行時間(每頁取20條), 如
MySQL大資料量分頁查詢方法及其優化
方法1: 直接使用資料庫提供的SQL語句 語句樣式: MySQL中,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N 適應場景: 適用於資料量較少的情況(元組百/千級) 原因/缺點: 全表掃描,速度會很慢 且 有的資料庫結果集返回不穩定(如某次返回
mysql 大資料量時 limit查詢優化
一般,我們在做分頁時,用的是語句如下:select * from table LIMIT 5,10; #返回第6-15行資料但是,如果資料量很大,比如>1000萬,則利用以上的查詢會非常慢,可以利用以下語句進行優化:Select * From table Where I
基於大資料量的快取查詢實現方案
業務、應用系統最常用的就是基於資料的查詢,這不同於巨集觀意義上的系統各個層面優化(應用端、服務端、DB端等等),基於資料的查詢更多時候需要考慮資料的規模、使用者的習慣、資料的變化性等因素
NHibernate的大資料量插入的簡單效能測試
[ActiveRecord] publicclass GuidTestObject { [PrimaryKey(PrimaryKeyType.GuidComb)] publicvirtual Guid Id { get; set; } [Pr
通過索引,極大提高MySQL大資料量下的查詢效率
我在這裡測試了兩個表的左連線查詢,SQL語句是:select a.blog_id,a.blog_title,a.blog_thumb,a.blog_click,a.blog_addtime,a.blog_show,b.blog_category_name from `thin
MySQL的MyISAM和InnoDB的大資料量查詢效能比較
因為工作關係,有一個超過11億記錄的MySQL資料庫,之前一直以為MyISAM引擎的查詢效能會超過InnoDB,這兩天特意測試了一下,不過因為資料量太大,轉換引擎就花了幾天時間。 測試環境: DELL 860伺服器,CPU Xeon3210, 記憶體8G MySQL版本5
大資料量下查詢顯示優化方案小結
# 大資料量下查詢顯示優化方案小結 # 最近工作中,遇到了優化大批量資料查詢和顯示的問題,資料量在10W級別。經過反覆設計和討論,最終得到優化到了較為滿意的效果,在此記錄小結下,在解決此類問題中的思考。 ## 問題背景說明 ## 通常情況下,使用者查詢資料量不超過1千條,但有幾個大戶,通過某種方式,生成
afs在大資料量時查詢優化
afs查詢,mule報錯的問題 1.mule報錯的原因 a)mule預設請求響應時間為10s,當請求返回的時間超過10秒就會報錯 2.導致請求時間過長的原因 a)欄位沒有建索引,count(*)統計記錄總數耗時過長(283W記錄統計耗時8-9s) b)一次性請求數量過多(經測試500條資料4