數據庫系統概念 第二十八章 Oracle

存儲和索引:算法

  oracle中,一個數據庫是由存儲在文件中的信息組成的,而且經過一個實例來訪問數據庫

  它是一個共享存儲區和一組與文件中的數據交互的進程安全

  控制文件是一個小文件,包含一些啓動或操做實例所需的很是高層的元數據數據結構

  表空間:oracle

    數據庫由一個或多個稱做表空間的邏輯存儲單元組成的函數

    表空間又由一個或多個稱做數據文件的物理結構組成,數據文件多是文件系統的一部分,或是原始的設備性能

    一個oracle數據庫一般包括如下表空間:大數據

      1 系統表空間和輔助的sysaux表空間老是被建立,包含數據字典表、觸發器和存儲過程的存儲器優化

      2 建立的存儲用戶數據的表空間,雖然用戶數據能夠存儲在系統表空間,但將用戶數據與系統數據分離通常是值得的加密

        決定要建立另外哪些表空間是基於性能、可用性、可維護性以及易於管理來考慮的

      3 撤銷表空間:僅僅用於存放事務管理和恢復的撤銷信息

      4 臨時表空間:許多數據庫操做須要對數據進行排序,若是排序不能再內存中完成,排序例程可能須要將數據暫時保存在硬盤上

    表空間也能夠做爲在數據庫之間轉移數據的一種方式,

    oracle經過簡單地複製數據文件並導入和導出少許的數據字典元數據,就容許一個表空間中的全部數據從一個系統轉移到另外一個系統

    oracle稱爲可移動表空間

  段:

    表空間中的空間被劃分爲一個個單元,稱爲段。每一個段包含一種特定數據結構的數據:

      1 數據段:表空間中的每一個表都有本身的數據段,表數據就存儲在這裏

      2 索引段:

      3 臨時段:當排序操做須要將數據寫到硬盤上時,或者將數據插入到臨時表中

      4 撤銷段:這些段包含了撤銷信息,使未提交事務能夠回滾

    在段這一層下,空間已盤區的粒度級別進行分配,每一個盤區由一組連續的數據庫塊組成

    數據庫塊是oracle進行磁盤I/O的最低的粒度級別。數據庫塊地大小沒必要和操做系統中的塊相同,但必須是它的倍數

  表:

    oracle中的標準表以堆組織(通常爲二叉樹)的,表中行的存儲位置不是由該行所包含的值決定的,而是在行被插入時肯定的

    按索引組織的表:

      在一個按索引組織的表中,記錄存儲在oracle的B樹索引中,而不是堆中

    壓縮:

      oracle的壓縮特性容許數據以壓縮格式存儲,壓縮極大地下降了存儲數據所需的空間和檢索數據所需的I/O操做數。

      oracle的壓縮方法是一種無損的、基於字典的算法,它單獨地壓縮每一個塊

      全部用來解壓一個塊地信息就包含在那個塊自身中

      算法把在塊中重複出現的值替換爲指向塊中符號表(或字典)中該值所對應項的指針

      項能夠基於單獨地列或者列的組合中重複的值

    數據安全:

      1 加密

      2 數據庫保險庫

      3 虛擬私人數據庫

  索引:

  位圖索引:

    位圖索引使用位圖表示索引項,當被索引的列有適中數量的不一樣值的時候,這種表示能夠實質性地節省空間

    字節對齊位圖壓縮:兩個連續的1之間的距離足夠小的部分存儲爲逐字位圖,距離大的話,存儲爲0的個數

    根據經驗,若是不一樣碼值數目少於表中行數的一半,位圖索引應該比常規B樹索引空間利用率更高

    例如,在一個具備100萬行的表中,若是少於50萬個不一樣取值的列上建立的是位圖索引,可能更節省空間

    對於取不多的、不一樣值的列,這樣的索引的空間優點能以更少的磁盤I/O帶來相應的性能優點

  基於函數的索引:

    能夠在包含一個或多個列的表達式上建立索引,例子:在表達式upper(name)上建立索引

  鏈接索引:

    索引中行標識所指向的關鍵字列並不在表中。

  域索引:

    oracle容許非oracle原生的索引結構對錶進行索引,

    這種擴展特性容許軟件廠商爲特定應用領域。如文本、空間數據和圖像,開發插卡式的功能

  劃分:

    oracle支持多種對錶和索引的水平劃分方式,而且這種特性在oracle支持特大數據庫的能力中發揮着重要做用

    優勢:

      1 備份和恢復更容易也更快速,由於能夠對單獨的分區進行而不是對整個表進行

      2 數據倉庫環境下的加載操做不那麼生硬,數據能夠添加到新建立的分區,而後把分區添加到表中

      3 查詢性能得到實質性受益

    被劃分的表上的索引能夠是全局索引,或者是局部索引。

    全局索引中的項能夠指向任何分區中的行,局部索引的表對每一個劃分有一個物理索引

    範圍劃分:

      在範圍劃分中,劃分標準是值的範圍,此劃分類型特別適合於日期列

    散列劃分:

      散列函數根據劃分列中的值把行映射到分區中

    列表劃分:

      與特定分區相關的值在一個列表中聲明

    複合劃分:

      被範圍、區間或列表劃分的表能夠進行範圍、列表或者散列子劃分

    參照劃分:

      劃分關鍵字是基於另外一個表的外鍵約束來定的

  物化視圖

  

 

 

 

查詢處理和優化:

  執行方法:

    數據能夠經過多種訪問方法來訪問:

      1 全表掃描:

      2 索引掃描

      3 索引快速掃描

      4 索引鏈接

      5 簇和散列簇訪問

    oracle有幾種方法把來自多個索引的信息合併在單個訪問路徑裏,

    這種能力容許多個where字句條件一塊兒使用來儘量有效地計算出結果集

  優化:

    查詢轉換:

      oracle支持的轉換和重寫的一些主要類型以下:

        1 視圖合併

        2 複雜視圖合併

        3 子查詢整平

        4 物化視圖重寫

        5 星型轉換

    訪問路徑選擇:

      oracle有一個基於代價的優化器來決定鏈接順序、鏈接方法以及訪問路徑

相關文章
相關標籤/搜索