Oracle 19C分區表索引小結

一、大佬說(楊廷琨)

LOCAL索引的最大好處是在進行分區操作,比如TRUNCATE PARTITION, DROP PARTITION時,不會出現索引INVALID的情況,不影響索引的可用性。由于GLOBAL索引所有的數據存儲在一起,因此當執行分區操作的時候,索引會失效,而如果想要保證所有的有效性,需要增加UPDATE (GLOBAL) INDEXES語句,這使得原本很快結束的DDL操作,由于需要維護全局索引而變得非常緩慢,且產生大量的日志。12c之后,全局索引的異步同步可以緩解全局索引的這個問題。

而GLOBAL索引的好處是,在表變為分區后,只要索引仍然是GLOBAL索引,通過索引訪問數據的效率就不會下降。由于LOCAL索引的索引分區數量和表分區數量相等,如果訪問一個LOCAL索引,且查詢條件未指定分區鍵值,這時Oracle將會掃描所有的索引分區。而GLOBAL索引則只需要訪問一棵索引樹,當分區數量眾多時,二者的效率差異是非常明顯的。

當然,它們還有其他的區別。就用戶而言,判斷需要GLOBAL還是LOCAL索引,最主要看是否會頻繁進行分區的維護操作,比如定期刪除老分區,如果是的話,LOCAL是最佳選擇,如果不是,則考慮GLOBAL索引。

二、索引驗證

1、創建臨時表

CREATE TABLE TEST1 (hid?number,hid2?number,hchar1 char(50))?

PARTITION BY?RANGE(hid)?INTERVAL (10)

( PARTITION p01 VALUES LESS THAN (5));

2、創建主鍵不加USING INDEX LOCAL默認是全局索引

ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) ?--全局索引;

ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid) USING INDEX?LOCAL;

3、主鍵是非分區字段

ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) ?--正常執行;

ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2) USING INDEX?LOCAL?--報錯ORA-14039: 分區列必須構成 UNIQUE 索引的關鍵字列子集;

ALTER TABLE TEST1 ADD CONSTRAINT PK_TEST PRIMARY KEY (hid2,hid) USING INDEX?LOCAL??--正常執行;

3、unique索引是非分區字段

create?unique?index pk_ID on TEST1(HID2)?local--報錯ORA-14039: 分區列必須構成 UNIQUE 索引的關鍵字列子集;

create?unique?index pk_ID on TEST1(HID2,HID)?local?--正常執行;

create?unique?index pk_ID on TEST1(HID2) --正常執行;

alter table TEST1 add constraint pk_ID2 primary key(HID2) using index pk_ID --正常執行;

create index pk_ID99 on TEST1(HID2)?local?--正常執行;

alter table TEST1 add constraint pk_ID99_2 primary key(HID2) using index pk_ID99 ?--報錯ORA-14196: 指定的索引不能用于強制約束條件;

4、非分區字段創建主鍵,則創建主鍵local索引時必須加上分區字段

ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主鍵字段,分區字段) USING INDEX LOCAL;

主鍵做local索引必須包含分區鍵的字段。這和oracle 如何保證紀錄唯一有關,如果unique index key沒有partition_key,那么每插入一行的紀錄,只保證它所進入的分區中是唯一的,不保證在整個表上這個記錄是否唯一,這就違背了主鍵的意義。(如果和分區字段一起綁定,則不需要掃描所有的索引分區就能驗證整個表上這個記錄是否唯一)。

5、range分區

range分區,單個分區內非分區字段的值不是順序的,分區字段值也不是順序的(如按100值分區,第一個分區是1-100,順序可能是7,1,3,67,9這樣的,第二分區101-200,順序可能是199,136,103,178這樣的,但是相對兩個分區而言,第二個分區和第一個分區值的范圍是順序的)

分區字段的分區索引是順序的,因為第一個數據分區開始到后面的數據分區是range順序的,雖然單獨的數據分區內數據不是順序的

非分區字段只是某一分區索引內的索引是順序的,不代表分區索引是順序的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898339.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AutoHub場景演示|帶您領略智能自動化操作的全新體驗

AutoHub是一款由OpenCSG推出的基于前沿大型語言模型(LLM)的瀏覽器自動化工具,旨在通過智能對話交互和自動化技術,幫助用戶更高效地瀏覽網頁和完成任務。它不僅能夠自動化繁瑣的網頁操作,還能夠為用戶提供精準的信息檢索…

深入解析 Linux 聲卡驅動:從架構到實戰

在嵌入式 Linux 設備中,音頻功能的實現離不開 Linux 聲卡驅動。而 ALSA (Advanced Linux Sound Architecture) 作為 Linux 內核的音頻框架,提供了一整套 API 和驅動模型,幫助開發者快速集成音頻功能。本篇文章以 WM8960 音頻編解碼器&#xf…

thinkphp5模型查詢數據庫,查出來的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查詢數據庫時將返回的字段名直接修改為其他名稱,可以通過以下幾種方式實現: 方法1:使用 field 方法指定字段別名 在查詢時通過 field 方法直接為字段指定別名(使用 AS 關鍵字)。 示例代碼: // 使用Db類查詢 $result = Db::name(user)->…

關于前端指令

在前端開發中,指令(Directives)通常指在框架中使用的一種特殊的語法或機制,用于擴展 HTML 的功能。常見的指令主要存在于前端框架中,如 Vue.js、Angular 等。下面我們將分別介紹 Vue.js 和 Angular 中的常用指令&#…

虛擬地址空間(下)進程地址空間(上)

一.關于頁表組成 1.權限(rwx) 作用:如1.讓代碼區變成只讀的 2.寫時拷貝的實現:子進程創建時其頁表指向的父進程代碼和數據權限都是只讀的,子進程試圖修改,觸發錯誤,系統開始寫時拷貝。 來源:…

【區塊鏈 + 航運物流】豐溯 - 區塊鏈溯源平臺 | FISCO BCOS 應用案例

豐溯是順豐科技推出的區塊鏈溯源平臺, 采用 FISCO BCOS 底層開源框架, 為農副食品、 冷鏈生鮮等企業客戶及消費 者提供關鍵流通節點的溯源信息服務,形成從源頭到消費者端全鏈路透明的信息鏈。 在商貿消費領域, 溯源一直是保障產品…

iwebsec-SQL數字型注入

1.判斷是否存在漏洞 添加and 11發現正常顯示,添加and 12無回顯條目,則存在sql注入漏洞 2.因為有回顯,嘗試union聯合注入,使用order by判斷出有3個字段 3.使用union聯合注入查看回顯位,發現3三個字段均有回顯&#xff…

藍橋杯每日五題第一日

藍橋杯每日5題 問題一 班級活動 1.班級活動 - 藍橋云課 問題描述 小明的老師準備組織一次班級活動。班上一共有 nn 名 (nn 為偶數) 同學,老師想把所有的同學進行分組,每兩名同學一組。為了公平,老師給每名同學隨機分配了一個 nn 以內的正…

STM32 —— 嵌入式系統、通用計算機系統、物聯網三層架構

目錄 一、嵌入式系統的概念 二、通用計算機系統與嵌入式系統的比較 用途 硬件 軟件 性能與功耗 開發與維護 三、嵌入式系統與物聯網的關系 四、物聯網的三層架構 1. 感知層(Perception Layer) 2. 網絡層(Network Layer) …

卡碼網25題——掌握ACM輸入輸出方式(15 至 18)

刷題小記: 本期涉及ACM模式下棧和鏈表的構建與使用,值得學習。 卡瑪網15.神秘字符(卡瑪網15.神秘字符) 題目分析: 若給定2行字符串,其中第一個串的長度為偶數,現要求把第二個串插入到第一個…

前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” !!!

🚀 前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” 🌟 嘿,技術冒險家們!👋 今天我們要聊一個開發中常見的“坑”:前端傳來的 JSON 參數字段名和后端對象字段名不一致,會發生…

python中使用單例模式在整個程序中只創建一個數據庫連接,節省資源

示例代碼: from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

AI小白的第六天:必要的數學知識(一)

在學習的過程中,不管是上代碼還是理論學習,其中都摻雜了一些數學知識。俗話說“磨刀不誤砍柴工”,而我已經“誤了砍柴功”了,現在變成了“亡羊補牢,為時不晚”。 線性代數 線性代數是數學的一個分支,主要…

【Linux】Bash是什么?怎么使用?

李升偉 整理 什么是 Bash? Bash(Bourne Again Shell)是一種 命令行解釋器(Shell),廣泛用于 Unix 和 Linux 操作系統。它是 Bourne Shell(sh) 的增強版,提供了更多的功能…

Qt Creator入門

1.創建項目 選擇創建項目-Application(Qt)-Qt Widgets Application-修改名稱即可 默認創建有窗口類,myWidget,基類有三種選擇:QWidget,QMainWindow,QDialog 注意: 名稱和創建路徑不能有中文、…

C語言經典代碼練習題

1.輸入一個4位數&#xff1a;輸出這個輸的個位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("輸入一個&#xff14;位數&#xff1a;");scanf("%d",&a);printf("個位&#xff1a;%d\n"…

cls(**dict(data, id=id))靈活地從一個字典生成實例,同時確保某些關鍵字段(如 id)被正確設置或覆蓋

示例代碼&#xff1a; classmethoddef from_mongo(cls: Type[T], data: dict) -> T:"""Convert "_id" (str object) into "id" (UUID object)."""if not data:raise ValueError("Data is empty.")id data.pop…

MyBatis XMLMapperBuilder 是如何將 SQL 語句解析成可執行的對象? 如何將結果映射規則解析成對應的處理器?

1. XMLMapperBuilder 如何將 SQL 語句解析成可執行對象 (MappedStatement): XMLMapperBuilder 解析 <select>, <insert>, <update>, <delete> 等 SQL 語句元素時&#xff0c;并不僅僅是簡單地讀取 SQL 文本&#xff0c;而是要將 SQL 語句和相關的配置…

咖啡點單小程序畢業設計(JAVA+SpringBoot+微信小程序+完整源碼+論文)

?全網粉絲20W,csdn特邀作者、博客專家、CSDN新星計劃導師、java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取項目下載方式&#x1f345; 一、項目背景介紹&#xff1a; 隨著社會的快速發展和…

003-掌控命令行-CLI11-C++開源庫108杰

首選的現代C風格命令行參數解析器! &#xff08;本課程包含兩段教學視頻。&#xff09; 以文件對象監控程序為實例&#xff0c;五分鐘實現從命令行讀入多個監控目標路徑&#xff1b;區分兩大時機&#xff0c;學習 CLI11 構建與解析參數兩大場景下的異常處理&#xff1b;區分三…