-
數據分區
對於海量的數據查詢優化,一種重要方式是如何有效的存儲並降低需要處理的數據規模,所以我們呢可以對海量數據進行分區.例如,針對年份存儲的數據,我們可以按照年進行分區,不同數據庫有不同的分區方式,但處理機制卻大體相同.例如SQLserver的數據分區將不同的數據存於不同的文件組中,而不同的文件存在不同的磁盤分區下,這樣吧數據分區,減少磁盤IO和系統負荷. -
索引
索引一般可以加速數據的檢索數據,加速表之間的連接,對表建索引包括在主鍵上建立聚簇索引,將聚合索引建立在日期列上, 索引的優點很多,但是對於索引的建立,還需要考慮實際情況,而不能對每個列都建索引.如果表結構很大,你要考慮到建立索引和維護索引的開銷,索引本身也占用物理空間,動態修改表也要動態維護索引,如果這些開銷大過索引帶來的速度優化,那就得不償失.
-
緩存機制
當數據量增加時,一般的處理工具都考慮緩存問題,緩存大小的設置也關系到數據處理的表現.列如,
處理2億條數據聚合操作室,緩存設置為100000條/buffer合理
-
加大虛存
由於系統資源有限,而處理的數據量非常大,當內存不足時,適量增加虛存來解決
-
分批處理
由於處理信息量巨大,可以對海量的數據進行分批(類似雲計算MapReduce),然后再對處理后的數據進行合並操作,分而治之,這樣有利於處理小數據.
-
使用臨時表和中間表
數據量增加時,處理中要考慮提前匯總,這樣做的目的是化整為零,大表變小表,分塊處理完之后再利用一定的規則進行合並,處理過程中的臨時表的使用和中間結果的保存都非常重要.如果對海量的數據,大表處理不了,只能拆分為多個小表.如果處理過程中需要多步匯總操作,則按匯總步驟一步一步來.
-
優化查詢語句
查詢語句的性能對查詢效率的影響非常大,盡量早的縮小查詢范圍
-
使用視圖
視圖是表中的邏輯表現,不占用物理地址,對於海量數據,可以按一定的規則分散到各個基本表中,查詢過程基於視圖進行.
-
使用存儲過程
在存儲過程中盡量使用SQL自帶的返回參數,而非自定義的返回參數,減少不必要的參數,避免數據冗余
-
用排序來取代非順序存儲
磁盤上的機械手臂的來回移動使得非順序磁盤存取變成了最慢的操作,但是在SQL語句中這個現象被隱藏了,這樣就使得查詢中進行了大量的非順序頁查詢,降低了查詢速度.
-
使用采樣數據進行數據挖掘
基於海量數據的數據挖掘方興未艾,面對超海量數據,一般的挖掘算法往往采用數據抽樣的方式進行處理,這樣誤差不會很大,大大的提高處理效率和處理的成功率.一般采樣時應注意數據的完整性,防止過大的偏差.