<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Oracle數據庫的聚簇技術

    時間:2024-10-03 11:05:06 Oracle認證 我要投稿
    • 相關推薦

    Oracle數據庫的聚簇技術

      聚簇是根據碼值找到數據的物理存儲位置,從而達到快速檢索數據的目的。聚簇索引的順序就是數據的物理存儲順序,葉節點就是數據節點。非聚簇索引的順序與數據物理排列順序無關,葉節點仍然是索引節點,只不過有一個指針指向對應的數據塊。一個表最多只能有一個聚簇索引。

      使用 Oracle 聚簇索引

      聚簇是一種存儲表的方法,這些表密切相關并經常一起連接進磁盤的同一區域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 數據行可以一起插入到稱為簇(Cluster)的單個區域中,而不是將兩個表放在磁盤上的不同扇區上。簇鍵(Cluster Key)可以是一列或多列,通過這些列可以將這些表在查詢中連接起來(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。為了將表聚集在一起,必須擁有這些將要聚集在一起的表。

      下面是create cluster命令的基本格式:

    create cluster (column datatype [, column datatype]...) [other options];

      cluster的名字遵循表命名約定,column datatype是將作為簇鍵使用的名字和數據類型。column的名字可以與將要放進該簇中的表的一個列名相同,或者為其他有效名字。下面是一個例子:

    create cluster BOOKandAUTHOR (Col1 VARCHAR2(100));

      這樣就建立了一個沒有任何內容的簇(象給表分配了一塊空間一樣)。COL1的使用對于簇鍵是不相干的,不會再使用它。但是,它的定義應該與要增加的表的主鍵相符。接下來,建立包含在該簇中的表:

    create table BOOKSHELF
        (Title VARCHAR2(100) primary key,
        Publisher VARCHAR2(20),
        CategoryName VARCHAR2(20),
        Rating VARCHAR2(2),
        constraint CATFK foreign key (CategoryName) references CATEGORY(CategoryName)
        )
        cluster BOOKandAUTHOR(Title);

      在向BOOKSHELF表中插入數據行之前,必須建立一個聚簇索引:

    create index BOOKandAUTHORndx on cluster BOOKandAUTHOR;

      在上面的create table語句中,簇BOOKandAUTHOR(Title)子句放在表的列清單的閉括號的后面。BOOKandAUTHOR是前面建立的聚簇的名字。Title是將存儲到聚簇Col1中的該表的列。create cluster語句中可能會有多個簇鍵,并且在created table語句中可能有多個列存儲在這些鍵中。請注意,沒有任何語句明確說明Title列進入到Col1中。這種匹配僅僅是通過位置做到的,即Col1和Title都是在它們各自的簇語句中提到的第一個對象。多個列和簇鍵是第一個與第一個匹配,第二個與第二個匹配,第三個與第三個匹配,等等。現在,添加第二個表到聚簇中:

    create table BOOKSHELF_AUTHOR
        (Title VARCHAR2(100),
        AuthorName VARCHAR2(50),
        constraint TitleFK Foreign key (Title) references BOOKSHELF(Title),
        constraint AuthorNameFK Foreign key (AuthorName) references AUTHOR(AuthorName)
        )
        cluster BOOKandAUTHOR (Title);

      當這兩個表被聚在一起時,每個唯一的Title在簇中實際只存儲一次。對于每個Title,都從這兩個表中附加列。

      來自這兩個表的數據實際上存放在一個位置上,就好像簇是一個包含兩個表中的所有數據的大表一樣。

      散列聚簇

      對于散列聚簇,它只有一個表。它通過散列算法求出存儲行的物理存儲位置,從而快速檢索數據。創建散列聚簇時要指定碼列的數據類型,數據行的大小及不同碼值的個數。如果碼值不是平均分布的,就可能有許多行存儲到溢出塊上,從而會降低查詢該表的SQL語句的性能。

      散列聚簇被用在總是通過主鍵查詢數據的情況,例如要從表 T 查詢數據并且查詢語句總是是這樣:

    select * from T where id = :x;

      這時散列聚簇是一個好的選擇,因為不需要索引。Oracle 將通過散列算法得到值 :x 所對應的物理地址,從而直接取到數據。不用進行索引掃描,只通過散列值進行一次表訪問。

      散列聚簇語法示例:

    CREATE CLUSTER personnel
        ( department_number NUMBER )
        SIZE 512 HASHKEYS 500
        STORAGE (INITIAL 100K NEXT 50K);
    
        CREATE CLUSTER personnel
        ( home_area_code NUMBER,
        home_prefix NUMBER )
        HASHKEYS 20
        HASH IS MOD(home_area_code + home_prefix, 101);
        CREATE CLUSTER personnel
        (deptno NUMBER)
        SIZE 512 SINGLE TABLE HASHKEYS 500;

    【Oracle數據庫的聚簇技術】相關文章:

    Oracle數據庫語句大全10-08

    ORACLE數據庫碎片的整理08-18

    oracle數據庫基本語句08-21

    Oracle數據庫認證層次08-29

    Oracle數據庫的基本介紹09-04

    Oracle數據庫SQLPLUS介紹10-09

    Oracle數據庫SELECT語句10-25

    Oracle 數據庫查詢小技巧10-17

    oracle數據庫基礎知識07-26

    Oracle數據庫基本知識09-13

    主站蜘蛛池模板: 中文字幕一精品亚洲无线一区| 久久精品无码午夜福利理论片| 亚洲成人国产精品| 精品久久香蕉国产线看观看亚洲| 亚洲?V乱码久久精品蜜桃| 国产偷亚洲偷欧美偷精品| 综合久久精品色| 国产精品自在线拍国产第一页| 91精品国产福利尤物| 中文字幕精品久久久久人妻| 国产福利精品视频自拍 | 精品久久久无码人妻中文字幕豆芽| 国产精品手机在线观看你懂的 | 国产乱码精品一品二品 | 国产精品久久久久jk制服| 亚洲国产午夜中文字幕精品黄网站| 国产L精品国产亚洲区久久| 国产福利91精品一区二区三区 | 欧美精品在线一区| 国产成人A人亚洲精品无码| 亚洲国产精品嫩草影院在线观看| 精品午夜福利1000在线观看| 色花堂国产精品第一页| 国产精品视频白浆免费视频| 亚洲动漫精品无码av天堂 | 免费视频精品一区二区| 国产成人精品久久一区二区三区av| 99国产精品久久| 国产精品99精品无码视亚| 久久棈精品久久久久久噜噜| 中文字幕日韩精品在线| 四虎亚洲国产成人久久精品| 麻豆国内精品久久久久久| 国产精品美女网站| 91精品国产福利在线观看麻豆| 精品国产自在在线在线观看| 国产91精品一区二区麻豆网站| 99久久99久久久精品齐齐| 国产精品午睡沙发系列| 国产精品天天看天天狠| 91精品欧美综合在线观看|