oracle 5種b 樹索引掃瞄方式

2021-08-09 14:22:41 字數 2952 閱讀 9563

index scan(索引掃瞄index lookup):

我們通常說的一般索引都是b樹索引(平衡樹),有以下特性

1 葉子節點關鍵字為資料庫值和rowid,兄弟節點間鏈指標相連(字節點滿了,則向父節點申請空間,一直疊加)

2 根/分支節點關鍵字儲存鍵值範圍(資料庫值範圍),分支節點兄弟節點間鏈指標相連,父子節點鏈指標相連

根據索引型別與where限制條件的不同,有5種型別的索引掃瞄:

3.1 index unique scan(索引唯一掃瞄):

存在unique或者primary key的情況下,返回單個rowid資料內容。

驗證:step1

create table t_index1 as

select rownum as rn1,rownum as rn2,trunc(dbms_random.value*1000000) as rn3 from dual connect by rownum<1000000;

alter table t_index1 add constraint c_pk1 primary key(rn1);

create index indx_t_1 on t_index1(rn2);

step2  

主鍵執行

一般索引執行

新增唯一約束

3.2 index range scan(索引範圍掃瞄):

1,在唯一索引上使用了range操作符(>,,>=,<=,between);

2,在組合索引上,只使用部分列進行查詢(部分即不唯一);

3,對非唯一索引上的列進行的查詢。

如上的一般索引執行

3.3 index full scan(索引全掃瞄)(相對於index_ffs,index_fs會消除排序,但是為了保證順序,所以一次只能讀取索引塊,其會消除排序,但是會增加單塊讀的開銷)

需要查詢的資料從索引中可以全部得到,且需要排序的資料

create table t_index2 as

select mod(rownum,9)  as rn1,rownum as rn2,trunc(dbms_random.value*1000000) as rn3 from dual connect by rownum<1000000;

create  index indx_t2_1 on t_index2(rn1);

set autotrace traceonly;

未消除排序(單塊讀的成本大於排序導致的成本,cbo選擇index_ffs)

消除排序

3.4 index fast full scan(索引快速掃瞄):(能夠按照物理塊順序來讀取索引段,並使用多塊讀取)

與index full scan類似,但是這種方式下不對結果進行排序。

1.索引跳躍式掃瞄適合於組合索引,比如(gender,age)

2.當根據組合索引的第乙個列gender(leading 列)做查詢時,通常是可以用的到索引的

3.當你想使用第二個列age作為篩選條件時,oracle可以使用索引跳躍式掃瞄

4.跳躍式掃瞄適合於第乙個列值重複比較多,第二個列唯一值比較多的情況

5.當組合索引多列時,一般要有2列或者多列非組合索引列聯合查詢才會用到index_ss,並且每個單獨列的cost一樣多。(實驗如此,不敢打包票)

--搗鼓的sql

create table t_index1 as

select rownum as rn1,rownum as rn2,trunc(dbms_random.value*1000000) as rn3 from dual connect by rownum<1000000;

alter table t_index1 add constraint c_pk1 primary key(rn1);

drop index indx_t_1

create unique index indx_t_1 on t_index1(rn2);

--alter table t_index1 add constraint c_check check(rn2 <1000000);

--alter table t_index1 drop constraint c_uniq

alter table t_index1 add constraint c_uniq unique (rn2);

drop index indx_t_1

alter table t_index1 modify rn2 not null;



oracle 5個重要後台程序作用

oracle後台程序作用總結1 pmon process monitor process 程序監控程序 1.監控程序與執行程序的恢復 2.負責清理buffer cache以及釋放客戶端程序使用的資源。例如重置事務表的狀態,釋放鎖,刪除程序id等 3.註冊例項資訊和排程程序到oracle net se...

mysql 新增b樹索引 Mysql之B樹索引

聚集索引 簡單概念 乙個表中根據主鍵建立的一棵b 樹,索引的葉子節點存放了表中所有的記錄,儲存記錄在物理位置上是連續的,乙個葉子節點存放一條對應的記錄 ps 是根據主鍵建立的b 樹,葉子節點存資料記錄 舉個例子 以漢語字典為例 漢語字典的正文本身就是乙個聚集索引,比如我們要查 安 字,由於漢語詞典的...

Oracle 5種模糊查詢資料庫中的表的方法

有時候,我們會忘記某張表的名字,這時需要在資料庫中模糊查詢某張表 我們需要在某張表中查詢其他所有的表,這張表應該統計資料庫中所有其他的表 可以有兩張錶可供查詢 all tables user objects user tab comments dba tab columns user tables ...