国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

讓你的連接查詢加速

2024-07-21 02:39:20
字體:
來源:轉載
供稿:網友

  Oracle9i引入了一種新的方法來加速對大型數據倉表格的連接(join)查詢。這種新的方法,即位圖連接索引(bitmap join index),要求創建一個索引,有這個索引在它被創建的時候進行合并操作,然后為連接中用到的要害字創建一個位圖索引。
  
  位圖連接索引背后的技術其實是把低基數數據列預先連接在一起,這樣就讓整體的連接(操作)進行得更快。在本文的例子里,我們將使用一個零件和供給商之間的多對多關系。每個零件都由多個供給商供給,而每個供給商能夠提供多種零件。這個數據庫里有200種不同類型的零件,供給商可以在(美國)所有50個州供給零件。
  
  要創建一個位圖連接索引,我們要使用下面的SQL。要注重CREATE INDEX句法里的FROM和WHERE子句。
  
  create bitmap index
    part_suppliers_state
  on
    inventory( parts.part_type, supplier.state)
  from
    inventory i,
    parts   p,
    supplier s
  where
    i.part_id = p.part_id
  and
    i.supplier_id = p.part_id;
  
  盡管b-tree索引被用在標準的交叉記錄(junction record)里,但是我們能夠提高Oracle9i查詢的性能,在這些查詢里判定述詞(PRedicate)會用到低基數數據列。例如,看看下面的查詢,我們可以通過這個查詢來獲得北卡羅來納的所有火花塞供給商:
  
  select
    supplier_name
  from
    parts
  natural join
    inventory
  natural join
    suppliers
  where
    part_type = 'piston'
  and
    state = 'nc'
  ;
  
  在Oracle9i之前的版本里,這個查詢會需要一個對所有三個表格進行嵌套循環連接(nested loop join)或者散列連接(hash join)。而在Oracle9i里,我們可以根據低基數數據列將這三個表格預先連接。
  
  Oracle宣稱,當所有的查詢數據都駐留在索引之內的時候,使用這種索引方法能夠把表格連接的速度提高7倍以上。然而在很多情況下,傳統的散列連接或者嵌套循環連接可能會比位圖連接做得更好。
  
  位圖連接不是一副萬能藥。下面就是索引的一些局限性:
  
  1.被索引的數據列必須是低基數的——通常要少于300個完全不同的值。
  2.在WHERE子句里,查詢絕對不能索引哪些沒有包含在索引里的數據列。
  3.更新位圖連接索引所需要的代價是相當高的。從實用的角度講,位圖連接索引被拋棄,而在天天晚上進行每日批量加載任務的時候才被重建。只有對于那些在處理的時候保持只讀的Oracle數據倉,位圖連接索引才會起作用。
  
  總而言之,位圖連接索引會極大地提高特定數據倉查詢的速度,但是其代價是在為圖索引創建的時候,需要預先連接表格。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛南县| 兴海县| 仪陇县| 白沙| 射洪县| 阿鲁科尔沁旗| 定南县| 南江县| 合作市| 林甸县| 湖州市| 哈尔滨市| 桑日县| 武山县| 博乐市| 华宁县| 凤山县| 富蕴县| 象山县| 洛浦县| 合山市| 观塘区| 二连浩特市| 福州市| 灵台县| 利辛县| 津市市| 峨边| 探索| 明水县| 奉贤区| 响水县| 蚌埠市| 长兴县| 抚顺县| 龙游县| 东辽县| 阳高县| 镇坪县| 蓬溪县| 新绛县|