ORACLE聚簇因子
我們在查詢索引狀態的時候,通常會用到user_indexes這張表,這張表中有一列(CLUSTERING_FACTOR 聚簇因子),這裡簡單的介紹下聚簇因子的意思,大家知道資料表中的資料都是無序的存在庫中,當我們在對資料進行檢索的時候,查詢起來很是耗費資源,於是我們就需要為表建立索引,索引的作用就是把表中的資料按照一定的順序排列儲存起來,於是就出現了一個問題,有的表中的資料和索引想要排列的順序很是相近,而另一些表中的資料和索引想要排列的順序相距甚遠,聚簇因子的作用就是用來標示這個的,聚簇因子越小,相似度越高,聚簇因子越大,相似度越低。
我們知道了聚簇因子是幹嘛的了,但是還不瞭解標示資料的相似度有何意義,我們繼續討論:
oracle在儲存資料的時候,並不是按照資料塊的順序挨個進行存入資料,因為前面存入的資料經常會有dml或者ddl操作,刪除資料後,原先存有資料的資料塊就變成了空塊,oracle為了節省儲存空間,當資料庫再次有新資料進行插入的話,就會優先使用那些空塊,只有當空塊不夠使用的時候,才會去高水位以上開闢新塊,這種情況也就會導致,一張表中的資料,並不是儲存在相鄰的資料塊中,於是聚簇因子變的很大,當這種情況進行邏輯讀取的時候,就會增加IO的次數,影響了讀取的速度。
既然說聚簇因子關係著表的讀取速度,那麼我們能夠手工控制聚簇因子的大小嗎?
答案是肯定的,但是事情總是有利也有弊,
1)我們可以對錶進行重構(alter table emp move);
2)或者按照索引的順序重建表(create table emp_bk as select * from emp order by empno);
3)可以在高水位以上開闢足夠的新塊,把一張表的資料全部存入這裡,以達到降低 聚簇因子的目的,但是帶來的結果也就是空間的浪費,同時因為高水位線是全表 掃描的終點,人為的拔高了水位線,容易造成全表掃的速率降低,因此需要慎重 考慮。
4)建立分割槽表,以減少對資料塊的訪問
例如 emp表中,僱員共分3個部門(deptno:10,20,30),我們按照部門號進行分割槽:
create table EMP
(
empno NUMBER(4) not null,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
)
partition by list(deptno)
(partition dept_10 values(10),
partition dept_20 values(20),
partition dept_30 values(30),
partition dept_other values(default));
當我們執行 select * from emp where deptno=10; 時,oracle會將不屬於10分割槽的其他分割槽,全部剔除出去,只訪問10部門分割槽。
檢視10部分分割槽:select * from emp partition(dept_10);
相關推薦
ORACLE聚簇因子
我們在查詢索引狀態的時候,通常會用到user_indexes這張表,這張表中有一列(CLUSTERING_FACTOR 聚簇因子),這裡簡單的介紹下聚簇因子的意思,大家知道資料表中的資料都是無序的存在庫中,當我們在對資料進行檢索的時候,查詢起來很是耗費資源,於是我們就需要
oracle聚簇表的理解 (轉自:https://blog.csdn.net/gumengkai/article/details/51009345 )
Oracle支援兩種型別的聚簇:索引聚簇和雜湊聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,則將這樣一組表儲存在相同的資料塊中 聚簇還表示把相關的資料儲存在同一個塊上。利用聚簇,一個塊可能包含多個表的資料。 概念上就是說如果兩個表或多個表經常做連線操作,就可以預先把需要的資料也儲存在一起
oracle聚簇表的理解 (轉自:https://blog.csdn.net/gumengkai/article/details/51009345 )
們的 關於 sele 結果 在一起 pac 問題 umeng eat Oracle支持兩種類型的聚簇:索引聚簇和哈希聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,則將這樣一組表存儲在相同的數據塊中 聚簇還表示把相關的數據存儲在同一個塊上。利用聚簇,一個塊可能包
oracle聚簇表
oracle支援兩種型別的聚簇:索引聚簇和雜湊聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,則將這樣一組表儲存在相同的資料塊中 聚簇還表示把相關的資料儲存在同一個塊上。利用聚簇,一個塊可能包含多個表的資料。 概念上就是說如果兩個表或多個表經常做連線操作,就可以
Oracle三種table: 堆表Heap Table、索引組織表IOT和聚簇表Cluster
常用資料庫支援情況: Oracle支援堆表,索引組織表,聚簇表Cluster; PostgreSQL只支援堆表,不支援索引組織表; Innodb只支援索引組織表; MyISAM只支援堆表。 Oracle使用rowid資料型別儲存行地址,rowid可以分成兩種,分別適於不同的
oracle點知識8——索引聚簇和雜湊聚簇
原文整理自網路: Oracle支援兩種型別的聚簇: 索引聚簇和雜湊聚簇 1. 什麼是聚簇 聚簇是根據碼值找到資料的物理儲存位置,從而達到快速檢索資料的目的。聚簇索引的順序就是資料的物理儲存順序,葉節點就是資料節點。非聚簇索引的順序與資料物理排列順序無關,葉節點仍然是
資料庫-Oracle中聚簇表的使用
Oracle中Cluster Table的使用 大家通常oracle中的cluster的理解是不準確的,經常和sql server中的cluster i
資料庫-Oracle中的聚簇
Oracle中的聚簇:Oralce中支援兩類聚簇,分別是索引聚簇和雜湊聚簇索引聚簇的使用: ◆對經常在連線語句中訪問的表建立聚簇。 ◆假如表只是偶爾被連線或者它們的公共列經常被修改,則不要聚簇表。(修改記錄的聚簇鍵值比在非聚簇的表中修改此值要花費更多的時間,因為Oracle
聚簇索引對數據插入的影響
logs span visio 引導 systemd 刪除數據 left join 技術分享 records 聚簇索引對數據插入的影響 背景 開發人員反饋系統執行某存儲過程特別慢,經排查是由於存儲過程執行過程中需要向新建的任務表插入大量數據,該任務表的主鍵是聚簇索引造成的。
【轉】聚簇索引與非聚簇索引的區別
聚集 lin 處理 更新 檢查 ref 末尾 滿足 實現 通常情況下,建立索引是加快查詢速度的有效手段。但索引不是萬能的,靠索引並不能實現對所有數據的快速存取。事實上,如果索引策略和數據檢索需求嚴重不符的話,建立索引反而會降低查詢性能。因此在實際使用當中,應該充分考慮到索引
mysql索引總結(3)-MySQL聚簇索引和非聚簇索引
部分 inno ext 找到 存儲位置 sso 影響 直接 支持 非聚簇索引 索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。 先創建一張表: CREATE TABLE `user` ( `id` INT NOT NULL , `name` VARCHAR NOT
堆組織表,索引組織表和索引聚簇表
卸載 對比 影響 partition 重新登錄 一個數 struct 可變 cal --- 堆組織表就不說了,其索引中記錄了記錄所在位置的rowid,查找的時候先找索引,然後再根據索引rowid找到塊中的行數據索引組織表,其行數據以索引形式存放,因此找到索引,就等於找到了行
【Mysql優化】聚簇索引與非聚簇索引概念
頁表 AR post www ont 效果 主鍵索引 隨機 過程 首先明白兩句話: innodb的次索引指向對主鍵的引用 (聚簇索引) myisam的次索引和主索引 都指向物理行 (非聚簇索引) 聚簇索引是對磁盤上實際數據重新組織以按
聚簇索引和非聚簇索引的區別
style 開頭 http inf 這就是 class 拼音 字母 就是 一、聚簇索引和非聚簇索引 1、聚簇索引和非聚簇索引: 我拿查字典做一個比喻,字典的頁面就好比是物理排列順序,物理排列順序是固定的,查詢的方式就好比是索引,區別是聚簇索引就好比是拼音查詢,每
詳解聚簇索引
原理 全部 聚簇索引 一行 如何 術語 是把 負責 指向 一、聚族索引的構造 聚簇索引並不是一種單獨的索引類型,而是一種數據存儲方式。具體的細節依賴於其實現方式,但InnoDB的聚族索引實際上在同一個結構中保存了B-Tree索引和數據行。當表有聚族索引
mysql效能調優(四)——聚簇索引、索引覆蓋
1、聚簇索引 這裡說的,聚簇索引是相對InnoDB資料庫引擎來說的,講的是聚簇索引隨機主鍵值的效率 對於InnoDB來說,主鍵儘量用整型,並且是遞增的比較好,因為新增的時候,如果是隨機主鍵插入,會存在節點分裂
【學習筆記】資料庫優化之索引(聚簇索引&非聚簇索引)
索引:對資料庫表中一列或多列的值進行排序的一種結構,通過索引可快速訪問資料庫表中的特定資訊,即通過索引對資料列的值進行結構化排序。 其中,索引包含聚簇索引和非聚簇索引 聚簇索引的順序就是資料的物理儲存順序 非聚簇索引的索引順序與資料物理排列順序無關 所以一個表
MySQL 聚簇索引&&二級索引&&輔助索引
MySQL非聚簇索引&&二級索引&&輔助索引 mysql中每個表都有一個聚簇索引(clustered index ),除此之外的表上的每個非聚簇索引都是二級索引,又叫輔助索引(secondary indexes)。 以InnoDB來說,每個
聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index)
索引的重要性 資料庫效能優化中索引絕對是一個重量級的因素,可以說,索引使用不當,其它優化措施將毫無意義。聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index) 最通俗的解釋是:聚簇索引的順序就是資料的物理儲存順序,而對非聚簇索引的
MySQL聚簇索引和非聚簇索引的對比
mage 自增 很多 拆分 .frm 性能 lock 兩個文件 inf 首先要清楚:聚簇索引並不是一種單獨的索引類型,而是一種存儲數據的方式。 聚簇索引在實際中用的很多,Innodb就是聚簇索引,Myisam 是非聚簇索引。 在之前我想插入一段關於innodb和myis