理解B樹索引

來源:互聯網
上載者:User

選擇和最佳化索引

理解B樹索引(BANLANCE)

1建表

createtablecust(

cust_idnumber,

last_namevarchar2(30),

first_namevarchar2(30));

2確定多個SQL查詢會頻繁在where子句使用last_name列,建立下列索引:

createindexindex_idx1oncust(last_name);

插入資料

insertintocustvalues(7,'ACER','SCOTT');

insertintocustvalues(4,'KAN','JIM');

insertintocustvalues(2,'FAN','BOB');

insertintocustvalues(9,'STAR','KIM');

...

insertintocustvalues(117,'ACER','SID');

3更新表統計資訊,為查詢最佳化工具提供足夠資訊

SQL>execdbms_stats.gather_table_stats(ownname=>'mlq',tabname=>'CUST',cascade=>true);

插入更多的資料,從表及索引中查詢資料,有三種可能的塊景:

A所有資料全在索引資料區塊

發生索引範圍描掃索引快速全掃描

selectlast_namefromcustwherelast_name='ACER';範圍掃描

自動跟蹤:

setautotraceon

selectcount(last_name)fromcust;

發生索引快速掃描,

通過查看執行計畫及統計資訊,可以得到更詳細的結果

B並不是所有資訊都包含在索引中

selectlast_name,first_namefromcustwherelast_name='ACER';

訪問first_name通過rownid

C僅訪問表資料區塊

select*fromcust;

全掃描

B樹索引是oracle預設的索引類型,對於大多數oltp來說足夠了。

它是很高效的,恰當使用,會使查詢快很多,如果索引結構本身含含查詢要擷取的列值,

那麼就不需要訪問表資料區塊。要理解這個原理,寫出高效索引,確定要建立索引的列,

以及判斷對某些查詢來說組合查詢是否更為高效。

估算一個索引所需要的空間

建立一個索引前,可以通過預存程序來估算所需的空間

setsererouton

execdbms_stats.gather_table_stats(user,'CUST');

variableused_bytesnumber

variablealloc_bytesnumber

execdbms-space.create_index_cost('createindexcust_idx2oncust(first_name)',:used_bytes,:alloc_bytes);)

print:used_bytes

print:alloc_bytes

查看輸出結果

本文出自 “mlqiang” 部落格,請務必保留此出處http://162234.blog.51cto.com/152234/1302485

相關文章

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.