Oracle中利用雜湊函數提高查詢速度

來源:互聯網
上載者:User
oracle|函數|速度

當資料存放區在一個普通表中的時候,這些記錄將以插入到資料庫時的順序物理地儲存到分配的塊中。例如,如果有一個用於儲存員工資訊的表,那麼員工姓名將會按照插入到表的順序儲存在表中。

如果員工記錄非常多的話,那麼資料表的響應速度就會逐漸層慢。你可以通過選擇值相對等分布的一列(如員工的部門編號)並建立一個簇表來提高查詢員工的速度。

在簇表中,如果員工屬於同一個部門,那麼它們的記錄將物理地儲存在同一系列的塊中。這樣就可以提高尋找員工資訊的速度,這是因為在檢索某個特定部門的員工時,需要讀取資料庫塊的數量減少了。而在非簇表中尋找員工,就可能需要對每個資料庫塊進行訪問。

當表中存在大量索引值的時候,你就會開始發現由於存在許多簇塊而導致的效能問題。避免這個問題的一個方法就是使用一個雜湊函數來約束簇塊的數量。雜湊函數將會給定一個數值用來限定簇塊數量的預計範圍,但它得到的值是相對等分布的。例如你可以建立一個雜湊函數,只比較部門編號的最後兩位。

雜湊函數中存在的一個問題就是函數值會打亂記錄原本的順序。你可以通過 ORDER BY來解決這個問題;但是,在很多情況下,記錄數量是非常龐大的。在Oracle 10g 中,你可以將一個資料定義為“natural order” ,那麼就可以不用經過排序而以你所希望的順序來檢索雜湊簇的資料,從而解決了上面的提出問題。

例如,假設你有一個信用卡業務的資料庫。你決定以信用卡號作為簇主鍵將有利於資料的儲存分布。但是,由於存在大量的信用卡號,所以可以使用一個雜湊函數來約束簇塊的數量。而且你希望在你的大部分報表中資料是按照時間順序排列的,那麼在進行每個查詢操作時使用排序雜湊簇,而不要使用ORDER BY。下面給出了相關語句:


  
  create cluster credit_cluster
  (
  card_no varchar2(16),
  transdate date sort
  )
  hashkeys 10000 hash is ora_hash(card_no)
  size 256;
  
  
  create table credit_orders
  (
  card_no varchar2(16),
  transdate date,
  amount number
  )
  cluster credit_cluster(card_no,transdate);
  
  
  alter session set nls_date_format = "YYYYMMDDHH24MISS";
  insert into credit_orders (card_no,transdate,amount)
  values ('4111111111111111','20050131000123',57.99);
  insert into credit_orders (card_no,transdate,amount)
  values ('4111111111111111','20050130071216',16.59);
  insert into credit_orders (card_no,transdate,amount)
  values ('4111111111111111','20050131111111',39.00);
  insert into credit_orders (card_no,transdate,amount)
  values ('4111111111111111','20050130081001',25.16);
 

  
可以看到我在這裡使用了一個新函數ORA_HASH 來為信用卡建立一個雜湊數值。現在,你可以非常簡單地對某個信用卡資料進行查詢,並返回自動排序後的結果。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.