2012-10-15 26 views
1

我有一張表,即X,大約64列存儲在線金融交易。 每天有數百萬條記錄被插入到X中。大約16列X是可查詢的,也就是說,許多系統報告需要根據這16列的值過濾X的數據。如何管理有大量插入和選擇的大型表格?

具有所有這16列的DB索引使插入操作太慢。另一方面,在某些列上沒有索引會導致一些報告太慢。

所以,這是問題。我如何設計表格X及其索引以獲得插入和報告的最佳性能?我使用oracle 11g DBMS。

+0

你需要實時報告,還是從x小時/天以前的結果令人滿意? – podiluska

+0

如果除延遲時間/天的報告外沒有解決方案,我必須接受它,但在線報告更可取。 – hsalimi

+1

爲什麼在這張桌子上有64列?我的直覺認爲這個表太寬了,這些數據中的一些應該分佈在更多的表格中。 –

回答

2

嘗試對錶格進行分區。不要創建一張巨大的表格,而應該每天,每週或每月創建一個表格,並將所有查詢連接起來。或者,Oracle支持分區表(但是否可用取決於您的Oracle版本)。

插入數據時,插入正確的分區。這樣,更新的索引將會小得多。缺點是你將需要更多的索引空間,因爲索引值將被複制。

從積極的角度來看,查詢可能會快得多,因爲當數據庫位於不同的磁盤上時,數據庫可以並行讀取表。

另請注意,SQL數據庫不會縮放到任何大小。改爲考慮一個集羣或雲數據庫。他們還有其他缺點,但他們可以處理任何數量的記錄(只要您有足夠的物理空間用於服務器,就是這樣)。

+1

沒有理由每天SQL數據庫無法擴展到數百萬個插入。什麼是「雲數據庫」? –

+0

主要原因是插入或查詢數據的時間隨着添加數據而增加。最終,數據庫上的任何操作都將花費太長時間。是的,術語「雲數據庫」並不確切。 「map-reduce有效的數據存儲」會更好嗎? –

+0

map-reduce能力是一個很好的術語。但我懇求在意見上有所不同。精心設計的SQL數據庫比我們大多數人意識到的可以進一步擴展。 –

0

Recommemdations:

  1. 嘗試,如果可能的正常化表。
  2. 如果不存在,創建聚集索引。 (INT64將在您的情況下執行)
  3. 如果索引列的大小很大並且遵循某種模式,請嘗試將不同的數據移動到單獨的查找表並使用代理鍵引用進行替換,這會減少索引大小。
  4. 使用多個鍵創建索引。 (減少索引數量)
  5. 由於在一年中您將獲得大約3.6億條記錄,因此對錶格進行分區。