Oracle資料庫索引原理分析

2021-09-24 16:33:50 字數 3050 閱讀 1837

統計資訊:描述資料庫中表,索引的大小,規模,資料分布狀況等的一類資訊。

執行計畫:一條查詢語句在oracle中的執行過程或訪問路徑的描述,即執行查詢語句的邏輯或方式

hint:開發人員控制執行計畫的介面,可以給sql語句執行具體的執行計畫

oracle在執行查詢語句的時候,會根據統計資訊對sql進行評估,選擇出最有的執行計畫去執行sql語句。所以是否選擇使用索引,和統計資訊有關。

2.1、統計資訊

1、統計資訊在工作日22:00-02:00會更新,雙休日可能全天統計

2、執行查詢時,資料庫會根據統計資訊評估,選擇出相應的執行計畫

2.2、執行計畫

2.3、索引(b樹)

索引建立後,會生成乙個索引表,使索引和表中資料形成對映;若表中的資料有更新而影響到了索引,那麼索引表則要重新生成,所以索引不利於插入、變更頻繁的表。

index range scan 範圍掃瞄

首先定位初始位置,然後向後遍歷,查詢出所有附和條件的索引

index full scan 索引全掃瞄

一般在統計表資料總條數時使用

注意點

單列索引不儲存null,

多列索引允許儲存null,但是不可以全部為null

2.4、表連線演算法

2.4.1、next loop

缺點:無索引的情況下,表過大,不可用

適用於oltp型別的交易,返回處理少量的資料

演算法結構:

for i in ( 語句1)

do 語句2

done

2.4.2、hash join

適用於olap型交易,返回或處理大量資料

缺點:第一張表的關聯值過多的相同,消耗cpu

原理步驟:

1、先訪問table1,按表關聯字段進行hash演算法

例如:取餘(id為連線字段)

若mod(table1.id, 1000) = 1,放在第1個桶中

若mod(table1.id, 1000) = 2,放在第2個桶中

若mod(table1.id, 1000) = 3,放在第3個桶中

…………………………

2、訪問table2,按照同樣的規則,與對應桶中的記錄進行比較,相同,即關聯上

2.5、簡單案例

場景介紹

第一天:建立table,插入200w條資料,查詢正常,20:00使用delete刪除表中的所有記錄

第二天:插入200w條資料,查詢時,速度相較於第一天很慢(數量級上的差別)

分析

第一天:由於錶剛建立,所以table的統計資訊為null,所以評估執行計畫時,沒有依據統計資訊

當天的22:00-02:00,更新table的統計資訊,所以對應的統計資訊變為資料行數0

第二天,插入200w條資料後,執行查詢時,資料庫進行評估時,認為table中的行數為0,所以選擇出了較為低效率的執行計畫,才會出現上述情況

3、oracle結構(補充)

database: 資料庫

tablespace:表空間是乙個邏輯容器,它和資料檔案關聯起來,乙個表空間至少有乙個資料檔案與之關聯。乙個表空間可以有多個段,乙個段只能屬於乙個表空間。

segment:段,是一種在資料庫中消耗物理儲存空間的任何實體(乙個段可能存在於多個資料檔案中, 因為物理的資料檔案 是組成邏輯表空間的基本物理儲存單位)如果乙個表不進行分割槽,那麼乙個表就是在乙個segment中。如果乙個表進行多個分割槽,那麼每乙個分割槽就在乙個segment。

block:塊,oracle儲存的最基本單位,由db_block_size制定,通常為8kb,也可以定義為2kb,4kb,16kb,32kb,64kb等,磁碟最小儲存單位是sector(512byte 作業系統概念),oracle資料塊由連續的sector組成,oracle讀寫單位是資料塊,應盡量設定block大小為磁碟資料塊大小的整數倍,避免io浪費

extent:區又叫盤區,是資料檔案中乙個連續的分配空間,它比塊要大,由塊組成。有些物件分配空間時可能至少需要兩個盤區,比如回滾段,而這兩個盤區不一定要求相連。區的大小從乙個塊到2gb不等

oracle中儲存的層次結構總結如下

1、資料庫由乙個或多個表空間組成

2、tablespace可以理解為segments的邏輯容器(包含多個段),由乙個或多個資料檔案組成

3、segment是db物件占有空間的最小單位,乙個物件可以包含0個、1個或多個segment,段由乙個或多個區組成

4、extent是資料檔案中乙個連續的分配空間,由乙個或多個塊組成。extent是空間分配的最小單位,oracle都是以extent為單位為物件分配空間的

5、block塊是資料庫中最小、最基本的空間單位,是資料庫使用的最小的i/o單元,資料的讀取都是以block的整數倍進行的,通常乙個db block通常是乙個os block的整數倍大小

6、schema可以理解為使用者下的所有物件的集合,每個使用者都有乙個對應的方案

資料庫 資料庫索引原理

正確的建立合適的索引 是提公升資料庫查詢效能的基礎 4.b tree 在兩大引擎中的體現 5.索引的原則 索引是為了加速對錶中資料行的檢索而建立的一種分散儲存的資料結構。索引能極大的減少儲存引擎需要掃瞄的資料量 索引可以把隨機io變成順序io 索引可以幫助我們在進行分組 排序等操作時,避免使 用臨時...

資料庫原理 索引

一 索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低了資料庫插入 修...

資料庫索引原理

說白了,索引問題就是乙個查詢問題。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算...