2009-08-31 86 views
8

我很想知道是否有性能上的好處,即對通常是查詢目標的數字列進行分區。目前我有一個包含5000萬條記錄的物化視圖。當使用常規b-tree索引並通過這個數字列進行搜索時,我花費了大約7秒的時間和大約0.8秒的時間查詢結果(使用非引導緩存)。在爲該列添加全局散列分區(包含64個分區)之後,我的成本爲6,查詢結果約爲0.2秒(再次使用非引導緩存)。全局分區索引是否比非分區索引更好(更快)?

我的第一反應是分區索引提高了我的查詢性能。但是,我意識到這可能只是一個巧合,可能完全依賴於正在搜索的值或其他我不知道的值。所以我的問題是:將全局哈希分區添加到大型數據表中的數值列是否會帶來性能優勢,或者是確定要掃描哪些索引分區的成本 - 只需在全局範圍內掃描非索引分區?

我敢肯定,像許多Oracle問題一樣,可以用「依賴」來回答。 :)我有興趣瞭解我應該考慮哪些因素來確定每種方法的優點。

謝謝!

回答

4

我很確定你在你的研究中發現了這個參考文獻 - Partitioned Tables and Indexes。不過,如果有人感興趣,我會給出一個鏈接,這是關於分區的一個非常好的材料。

直接點 - 分區索引只是將索引分解成塊(在您的情況下爲16),並根據散列分區鍵傳播數據。當你想使用它時,Oracle會「計算」密鑰的哈希值並確定在哪個部分繼續搜索。

瞭解索引搜索是如何工作的,對於真正巨大的數據我認爲最好選擇分區索引以減少您遍歷的索引樹(常規索引)。它實際上取決於表中的數據(構造常規索引樹的方式),並且比起始節點的常規樹遍歷更快地哈希和直接跳轉到較低節點。

最後,您必須對測試結果更有信心。如果有一種技術比其他技術更精確地獲得更好的結果,不用擔心實施。