首頁 資料庫 mysql教程 全局分区索引与局部分区索引

全局分区索引与局部分区索引

Jun 07, 2016 pm 03:28 PM
全域 分割區 局部 索引

分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种。下面我们讨论了这三种索引的组织结构以及应用场景。 1.全局非分区索引可以依赖普通的表,也可以依赖分区表建立。 CREATE INDEX month_ix ON s

分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种。下面我们讨论了这三种索引的组织结构以及应用场景。

1.全局非分区索引可以依赖普通的表,也可以依赖分区表建立。 CREATE INDEX month_ix ON sales(sales_month); 等同于CREATE INDEX month_ix ON sales(sales_month) GLOBAL;

2.全局分区索引 全局分区索引使用一种有别于底层表的分区机制,意思是索引的分区键可以选择跟表的分区键不一致,但索引的索引键前缀要包含索引的分区键。也就是只有”全局前缀索引“,而没有“全局非前缀索引”。这样,拿了索引分区键做前缀的索引,即使不包含表分区键,也能用于表的unique与primary约束。 建成后有多个段,每个段代表一个索引分区,每个索引分区中的键值可以指向任何表分区。可以依赖普通的表,也可以依赖分区表建立。可能索引分区数不等于表分区数。只能按range或hash(10g起)对索引分区。全局索引的range分区最后一个分区必须是maxvalue,以保证底层表的所有行都能放到这个索引中。 CREATE INDEX month_ix ON sales(sales_month,sales_date) GLOBAL PARTITION BY RANGE(sales_month) (PARTITION pm1_ix VALUES LESS THAN (2), PARTITION pm2_ix VALUES LESS THAN (3), PARTITION pm3_ix VALUES LESS THAN (4), PARTITION pm4_ix VALUES LESS THAN (5), PARTITION pm12_ix VALUES LESS THAN (MAXVALUE));

全局索引建立时global 子句允许指定索引的范围值,这个范围值是索引分区键的范围。全局分区索引的GLOBAL PARTITION BY RANGE(sales_month)的sales_month是指定索引分区键,可以跟表分区键不一样,我行我素地设立分区键,此时sales(sales_month,sales_date)句子,指定索引键,其前缀就必须包含索引分区键了。这一切,都可以跟底层表没啥关系。

使用场景: 对于数据仓库,例如不断有旧数据的删除与新数据的流入(滑动窗口),全局索引很容易失效,使性能受影响。

3.局部分区索引 不能对普通表建这个索引,只能依赖分区表建立,并且是依赖分区表的分区键来建立,即依赖底层表的分区机制来建立索引。随着表分区,建立一一对应的索引分区,每个索引分区中的条目都只指向一个表分区。 CREATE INDEX loc_dept_ix ON dept(deptno) LOCAL; create index dinya_idx_t on dinya_test(item_id) local ( partition idx_1 tablespace tbs1, partition idx_2 tablespace tbs2, partition idx_3 tablespace tbs3 ); 局部分区索引逻辑上可以划分为: 局部前缀索引--表分区键在索引定义的第一列上。例如对表的字段LOAD_DATE进行range分区,而建索引时,LOAD_DATE又是索引的第一列。局部非前缀索引--索引不以表分区键作为它的索引字段的第一列,甚至压根不包含分区键。

局部前缀索引与局部非前缀索引,对分区消除的影响? 首先我们得明白什么是分区消除。一个事务,可以只考虑特定的分区,其余分区就算物理介质损坏,其他分区所在表空间offline等,事务都可以不理会以及不扫描他们。分区消除的种类:表的分区消除,与索引的分区消除。分区消除更多的是为了可用性,以及在出现全表扫与全索引扫的时候,转换为只扫特定的分区以提高性能。 能否使用分区消除,关键在于谓词是否有分区键。如果谓词包含分区键,那可能是实现索引分区消除,也可能是表分区消除。如果谓词不包含分区键,那神马分区消除都是奢想。至于使用的是局部前缀索引还是局部非前缀索引,影响的只是能否实现索引分区消除。用局部前缀索引才能实现索引分区消除,用局部非前缀索引,不能实现“索引分区消除“(但表的分区消除仍然可能实现,但当cbo评估出来要先走索引,却发现索引分区不可用,如所在表空间offline了,此时已不能改路了)。cbo评估代价时,不会考虑分区索引是否可用,评估出一个路径,走下去发现此路不通,也不能走回头路了而直接报错了。

局部前缀索引与局部非前缀索引,对于sql执行性能?如果将索引作为查询计划的第一步,效率上其实并没有什么区别,尽管前缀与非前缀索引会影响到是否能使用分区消除,但分区消除是什么呢?是可用性的提高,以及将全表扫描转为单分区全扫的性能上的优化。所以对于走索引作为第一步,是否分区消除不要紧,从而是否前缀也就不要紧了。

局部前缀索引与局部非前缀索引的选择? 怎么选择,首先应该是能满足需求的。你如果建立一个(b,a)的索引,却总查where a=3,引出很多skip scan那就不好了,此时是应该换成建立(a,b)的索引。 如果仅仅有where a=1 and b=2这样的查询,你可能会问,我们是建(a,b)好还是(b,a)好呢,看哪个字段的选择性好,看我们有没有必要走a的索引分区消除,假如b的密度很大,从1-50000都有,而a只能是1与2,那么我们把b排前面更好。所以将哪个字段放前面,得满足业务需求、综合谓词的分区消除,与字段选择率来选择。

局部索引与唯一约束 分区表字段想用unique或primary key约束,一般是使用全局索引来保证唯一性,这是一般的做法。因为局部索引只保证分区内部的键的唯一性,而不能跨分区,如果你的确想用局部索引来保证整个表的唯一性,就得把分区键加到约束当中,也成。如果oracle允许局部索引(不包含约束的情况)就能轻易来保证全表的唯一性,那么所有的update与insert,都得扫每一个分区,这样可用性与可扩展性都会丧失殆尽。

4.总结 三种索引的选择? OLAP系统中多用局部索引,OLTP系统上,全局索引更为常见。可用性角度:局部索引更可用,就算一个索引分区出问题了也不影响其他,而全局索引很可能会成为一个故障点,一旦出现问题则整个索引都不可用。维护性角度:局部索引更好维护更灵活,DBA决定移动一个表分区,只需要重建与维护一个索引分区。对全局索引,很多情况下都需重建。 sql效率:因为局部索引随表分区,可以涉及出最优的执行计划。

视图 select * from DBA_IND_PARTITIONS where index_name='LOCAL_NOPREFIXED'; select * from DBA_PART_INDEXES where index_name='LOCAL_NOPREFIXED'; select * from DBA_PART_KEY_COLUMNS where name='LOCAL_NOPREFIXED';

实验: --创建表空间tbs1,tbs2,tbs3 create tablespace tbs1 datafile '+DATA6_MIDG'; create tablespace tbs2 datafile '+DATA6_MIDG'; create tablespace tbs3 datafile '+DATA6_MIDG'; SQL> --创建一个range分区表 create table t_part(a int,b int,data char(20)) partition by range (a) (partition p1 values less than(2) tablespace tbs1, partition p2 values less than(3) tablespace tbs2 ); --插入一些数据 insert into t_part select mod(rownum-1,2)+1,rownum,'x' from all_objects; commit; SQL> select * from t_part where rownum --为表收集统计信息 begin dbms_stats.gather_table_stats(user,'t_part',cascade=>TRUE);end; --把tbs2表空间下线,此时可以验证索引分区消除,将tbs1下线,可以验证表分区消除。 alter tablespace tbs3 offline; --再用这种命令来测试 select * from t_part where a=1 and b=1; select * from t_part where b=1; select /*+full(t_part)*/ * from t_part where a=1 and b=1;

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決win11系統保留分區無法更新的問題 解決win11系統保留分區無法更新的問題 Dec 26, 2023 pm 12:41 PM

在更新了win11後有些用戶遇到了無法更新系統保留的分區,導致沒法使用下載更多的新軟體,所以今天就給你們帶來了win11無法更新系統保留的分區解決方法,趕快來一起下載試試吧。 win11無法更新系統保留的分區怎麼辦:1、先右鍵下方的開始選單按鍵。 2、然後右鍵點選選單點擊運行。 3.在運行中輸入:diskmgmt.msc回車。 4.之後可以進入系統磁碟,查看EFI系通分割區,查看空間是否小於300M。 5.如果太小可以下載工具將系統預留分割區改成大於300MB建議450M即可。

oracle索引類型有哪些 oracle索引類型有哪些 Nov 16, 2023 am 09:59 AM

oracle索引類型有:1、B-Tree索引;2、位圖索引;3、函數索引;4、雜湊索引;5、反向鍵索引;6、局部索引;7、全域索引;8、網域索引;9、位圖連接索引;10、複合索引。詳細介紹:1、B-Tree索引,是一種自平衡的、可以有效率地支援並發操作的樹狀資料結構,在Oracle資料庫中,B-Tree索引是最常用的一種索引類型;2、位圖索引,是一種基於點陣圖演算法的索引類型等等。

【Linux系統】fdisk相關分區指令。 【Linux系統】fdisk相關分區指令。 Feb 19, 2024 pm 06:00 PM

fdisk是常用的Linux命令列工具,用於建立、管理和修改磁碟分割區。以下是一些常用的fdisk指令:顯示磁碟分割資訊:fdisk-l此指令將顯示系統中所有磁碟的分割區資訊。選擇要操作的磁碟:fdisk/dev/sdX將/dev/sdX替換為要操作的實際磁碟裝置名稱,如/dev/sda。建立新分割區:n這將引導您建立一個新的分割區。依照指示輸入分割區類型、起始磁區、大小等資訊。刪除分割區:d這將引導您選擇要刪除的分割區。依照提示選擇要刪除的分割區編號。修改分割區類型:t這將引導您選擇要修改類型的分割區。按照提

win10安裝後無法分割的解決方法 win10安裝後無法分割的解決方法 Jan 02, 2024 am 09:17 AM

我們再重裝win10作業系統的時候,到了磁碟分割的步驟卻發現出現系統提示無法建立新的分割區也找不到現有分割區。對於這種情況小編覺得可以嘗試將整個硬碟重新進行格式化再次安裝系統進行分割區,或透過軟體重新進行系統安裝等等。具體內容就來看看小編是怎麼做的吧~希望可以幫助到你。安裝win10無法建立新的分割區怎麼辦方法一:格式化整個硬碟重新分割區或嘗試插拔U盤幾次並刷新,如果你的硬碟上沒有重要資料的話,到了分割區這一步時,將硬碟上的所有分割區都刪除了。重新格式化整個硬碟,然後重新分割區,再進行安裝就正常了。方法二:P

詳解Linux Opt分區的設定方法 詳解Linux Opt分區的設定方法 Mar 20, 2024 am 11:30 AM

LinuxOpt分區的設定方法及程式碼範例在Linux系統中,Opt分割區通常用於儲存可選軟體包和應用程式資料。合理設定Opt分割區可以有效管理系統資源,避免磁碟空間不足等問題。本文將詳細介紹如何設定LinuxOpt分區,並提供具體的程式碼範例。 1.確定分割空間大小首先,我們要確定Opt分割區所需的空間大小。一般建議將Opt分區的大小設定為系統總空間的5%-1

如何在Windows 11中增加WinRE分割區大小 如何在Windows 11中增加WinRE分割區大小 Feb 19, 2024 pm 06:06 PM

在這篇文章中,我們將向您展示如何在Windows11/10中變更或增加WinRE分割區大小。微軟現在將在每月累積更新的同時更新Windows復原環境(WinRE),開始於Windows11版本22H2。然而,並非所有電腦都有足夠大的恢復分區以容納新的更新,這可能導致錯誤訊息出現。 Windows復原環境服務失敗如何在Windows11中增加WinRE分割區大小要在您的電腦上手動增加WinRE分割區大小,請執行下面提到的步驟。檢查並停用WinRE縮小作業系統分區建立新的復原分區確認分區並啟用WinRE

win10分區整理的整數計算解決方法 win10分區整理的整數計算解決方法 Dec 30, 2023 pm 07:41 PM

在Windows分區時如果簡單地按照1GB=1024MB的方式輸入計算出來的值的話,最終總是只能得到類似259.5GB/59.99GB/60.01GB這樣結果,而不是整數,那麼win10分區整數是如何計算的呢?下面跟小編一起來看看吧。 win10分區整數計算的公式:1、公式為:(X-1)×4+1024×X=Y。 2.想要得到Windows的整數分割區必須知道一個公式,透過這個公式算出的值才能被Windows認成整數GB的值。 3.其中,X就是想要得到的整數分區的數值,單位是GB,Y是分割時應該輸入的數

深度Linux硬碟分割區及安裝教學:一步步實現系統的高效部署 深度Linux硬碟分割區及安裝教學:一步步實現系統的高效部署 Feb 10, 2024 pm 07:06 PM

在進行深度Linux的安裝之前,我們需要對硬碟進行分區,硬碟分區是將一塊實體硬碟劃分為多個邏輯區域的過程,每個區域可以獨立使用和管理,正確的分區方式可以提高系統的效能和穩定性,因此這一步非常重要,本文將為您提供詳細的深度Linux硬碟分割區及安裝教學。準備工作1.確保您已經備份了重要的數據,因為分割過程會清除硬碟上的所有資料。 2.準備一個深度Linux的安裝媒介,例如USB或光碟。硬碟分區1.開機進入BIOS設置,將啟動媒介設定為首選啟動設備。 2.重啟計算機,從啟動媒介引導進入系統安裝介面。 3.選擇

See all articles