分區索引常用命令

一般使用LOCAL索引較為方便,而且維護代價較低,并且LOCAL索引是在分區的基礎上去創建索引,類似于在一個子表內部去創建索引,這樣開銷主要是區分分區上,很規范的管理起來,在OLAP系統中應用很廣泛;而相對的GLOBAL索引是全局類型的索引,根據實際情況可以調整分區的類別,而并非按照分區結構一一定義,相對維護代價較高一些,在OLTP環境用得相對較多,這里所謂OLTP和OLAP也是相對的,不是特殊的項目,沒有絕對的劃分概念,在應用過程中依據實際情況而定,來提高整體的運行性能。

3、常用視圖:
1、查詢當前用戶下有哪些是分區表:
SELECT * FROM USER_PART_TABLES;

2、查詢當前用戶下有哪些分區索引:
SELECT * FROM USER_PART_INDEXES;


3、查詢當前用戶下分區索引的分區信息:
SELECT * FROM USER_IND_PARTITIONS T
WHERE T.INDEX_NAME=?

4、查詢當前用戶下分區表的分區信息:
SELECT * FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME=?;

5、查詢某分區下的數據量:
SELECT COUNT(*) FROM TABLE_PARTITION PARTITION(TAB_PARTOTION_01);


6、查詢索引、表上在那些列上創建了分區:
SELECT * FROM USER_PART_KEY_COLUMNS;


7、查詢某用戶下二級分區的信息(只有創建了二級分區才有數據):
SELECT * FROM USER_TAB_SUBPARTITIONS;

4、維護操作:
4.1、刪除分區
? ? ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_03;
? ???如果是全局索引,因為全局索引的分區結構和表可以不一致,若不一致的情況下,會導致整個全局索引失效,在刪除分區的時候,語句修改為:
? ???ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_03 UPDATE GLOBAL INDEXES;


4.2、分區合并(從中間刪除掉一個分區,或者兩個分區需要合并后減少分區數量)
? ? 合并分區和刪除中間的RANGE有點像,但是合并分區是不會刪除數據的,對于LIST、HASH分區也是和RANGE分區不一樣的,其語法為:
ALTER TABLE TABLE_PARTITION MERGE PARTITIONS? ? TAB_PARTOTION_01,TAB_PARTOTION_02 INTO PARTITION MERGED_PARTITION;


4.3、分隔分區(一般分區從擴展分區從分隔)
ALTER TABLE TABLE_PARTITION SPLIT PARTITION TAB_PARTOTION_OTHERE AT(2500000)
INTO (PARTITION TAB_PARTOTION_05,PARTITION TAB_PARTOTION_OTHERE);

4.4、創建新的分區(分區數據若不能提供范圍,則插入時會報錯,需要增加分區來擴大范圍)
一般有擴展分區的是都是用分隔的方式,若上述創建表時沒有創建TAB_PARTOTION_OTHER分區時,在插入數據較大時(按照上述建立規則,超過1800000就應該創建新的分區來存儲),就可以創建新的分區,如:
為了試驗,我們將擴展分區先刪除掉再創建新的分區(因為ORACLE要求,分區的數據不允許重疊,即按照分區字段同樣的數據不能同時存儲在不同的分區中):
ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_OTHER;
ALTER TABLE TABLE_PARTITION ADD PARTITION TAB_PARTOTION_06 VALUES LESS THAN(2500000);


在分區下創建新的子分區大致如下(RANGE分區,若為LIST或HASH分區,將創建方式修改為對應的方式即可):
ALTER TABLE <table_name> MODIFY PARTITION <partition_name> ADD SUBPARTITION <user_define_subpartition_name> VALUES LESS THAN(....);

4.5、修改分區名稱(修改相關的屬性信息):
ALTER TABLE TABLE_PARTITION RENAME PARTITION MERGED_PARTITION TO MERGED_PARTITION02;

4.6、交換分區(快速交換數據,其實是交換段名稱指針)
??首先創建一個交換表,和原表結構相同,如果有數據,必須符合所交換對應分區的條件:
CREATE TABLE TABLE_PARTITION_2
??AS SELECT * FROM TABLE_PARTITION WHERE 1=2;
??然后將第一個分區的數據交換出去
ALTER TABLE TABLE_PARTITION EXCHANGE PARTITION TAB_PARTOTION_01
??WITH TABLE TABLE_PARTITION_2 INCLUDING INDEXES;?
??此時會發現第一個分區的數據和表TABLE_PARTITION_2做了瞬間交換,比TRUNCATE還要快,因為這個過程沒有進行數據轉存,只是段名稱的修改過程,和實際的數據量沒有關系。

??如果是子分區也可以與外部的表進行交換,只需要將關鍵字修改為:SUBPARTITION 即可。

4.7、清空分區數據
? ?ALTER TABLE <table_name> TRUNCATE PARTITION <partition_name>;
? ?ALTER TABLE <table_name> TRUNCATE subpartition <subpartition_name>;

9、磁盤碎片壓縮
? ?對分區表的某分區進行磁盤壓縮,當對分區內部數據進行了大量的UPDATE、DELETE操作后,一定時間需要進行磁盤壓縮,否則在查詢時,若通過FULL SCAN掃描數據,將會把空塊也會掃描到,對表進行磁盤壓縮需要進行行遷移操作,所以首先需要操作:
ALTER TABLE <table_name> ENABLE ROW MOVEMENT ;


? ? 對分區表的某分區壓縮語法為:
ALTER TABLE <table_name>
modify partition <partition_name> shrink space;
? ?對普通表壓縮:
ALTER TABLE <table_name> shrink space;
??對于索引也需要進行壓縮,索引也是表:
ALTER INDEX <index_name> shrink space;

10、分區表重新分析以及索引重新分析
??對表進行壓縮后,需要對表和索引進行重新分析,對表進行重新分析,一般有兩種方式:
??在ORACLE 10G以前,使用:
BEGIN
? ???dbms_stats.gather_table_stats(USER,UPPER('<table_name>'));
??END;


??ORACLE 10G后,可以使用:
??ANALYZE TABLE <table_name> COMPUTE STATISTICS;

??索引重新分析,將上述兩種方式分別修改一下,如第一種可以使用:gather_index_stats,而第二種修改為:ANALYZE INDEX即可,不過一般比較常用的是重新編譯:
??對于分區表并進行了索引分區的情況,需要對每個分區的索引進行重新編譯,這里以LOCAL索引為例子(其每個索引的分區和表分區結構相同,默認分區名稱和表分區名稱相同):
ALTER INDEX <index_name> REBUILD PARTITION <partition_name>;
??對于全局索引,根據全局索引鎖定義的分區名稱修改即可,若沒有分區,和普通單表索引重新編譯方式相同:
ALTER INDEX <index_name> REBUILD;


11、關聯對象重新編譯,
??上述對表、索引進行重新編譯,尤其對表進行了壓縮后會產生行遷移,這個過程可能會導致一些視圖、過程對象的失效,此時要將其重新編譯一次。


12、擴展:HASH分區中,如果創建了新的分區,可以將其進行重新HASH分布:
ALTER TABLE <table_name> COALESCA PARTITION%?

5、回歸總結:何時建分區,分區類別,索引,如何對應[url=]SQL[/url]

1、創建時機

? ???上述已經說明,2G以上的表,ORACLE推薦創建分區。
? ???分區的方式根據實際情況而定,才能提高整體性能。
? ???分區的字段一定要是經常用以提取數據的字段,否則會在提取過程中導致遍歷多個分區,這樣比沒有分區還要慢。
? ???分區字段要選擇合適,數據較為均勻分布到各個分區,不要太多也不要太少,而且根據分區字段可以很快定位到分區范圍。
? ???一般情況下,盡量然業務操作在同一個分區內部完成。

2、分區類別
? ? 分區主要有RANGE、LIST、HASH;
? ???RANGE通過值的范圍分區,也是最常用的分區,這種分區注意在一種變長數字字符串中,很多人會導致認為是數字類型,而按照數字區分區,這樣會分布十分不均勻的現象發生。
? ???LIST是列舉方式進行分區,一般作為二級分區而存在(當然也可以自己分區,ORACLE 11G后在分區上也可以作為主分區而存在),在RANGE基礎上,若數據需要繼續分區,并且在RANGE基礎上數據量較為固定,只是較大,可以按照一定規則進一步分區。??}?
? ???HASH只指定分區個數,分區細節由ORACLE完成,增加HASH分區可以重新分布數據。


? ???注意:分區字段不能使用函數轉換后在分區,如,將某數字字符串字段,先TO_NUMER(COL_NAME)后分區。


3、索引類別
? ? 大致分:GLOBAL索引和LOCAL索引,錢和可以分:GLOBAL不分區索引,和GLOBAL分區索引。

? ???GLOBAL不分區索引一般不太推薦,因為是用一顆大的 索引樹 來映射一個表,這個過程,這樣速度不見得比不分區快。
? ???GLOBAL分區索引,查找數據若通過要通過索引,是先定位了索引內部的分區,然后在這個分區索引中找到ROWID,然后回表提取數據。
? ???LOCAL索引是和分區的個數逐個對應的,可以說先定位分區表的分區也可以說先定位索引的分區,因為他們是一一對應的,找到對應分區后,分區內部索引數據集合。

4、對應應用0?
? ???分區表、索引、分區索引,要利用其性能優勢,最基本就是要提取數據時,要通過它首先將數據的范圍縮小到一個即使做全盤掃描也不會太慢的情況。
? ?? ?所以SQL一定要有分區上的這個字段的一個WHERE條件,將數據迅速定位到分區內部,而且盡量定位到一個分區里面(這個和創建分區的規則有關系)。
? ?? ?建立分區本身不提要性能,要用好才可提高性能,在必要的RAC集群中,若存在多分區提取數據,適當采用并行提取可以提高提取的速度。
? ?? ?對于索引部分,這里也只提到分區索引的創建方式以及常見索引的維護方式,對于索引原理理解后會更容易認識到提取數據時的技巧。

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

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

相關文章

面向對象簡述

1&#xff0c;封裝&#xff1a;將對象的屬性集成在 class person:def __init__(self,name,idnum):self.namenameself.idnumidnum 2&#xff0c;繼承&#xff1a;子類自動擁有父類的的封裝&#xff0c;除了非私有之外 class person: def __init__(self,name,idnum): self.namena…

== 和 is 的區別

1. 比較的是值 a2 b2 print(a b) # True lis1 [1,2,3] lis2 [1,2,3] print(lis1 lis2) # True 2.is 是比較的是內存地址 a name print(id(a)) # 內存地址 字符串 a name b name print(a is b) # True 數字 n 10 n110 print(n is n1) # True 小數據池 數字 -5~256 字…

oracle數據量大時候分區索引思路

有一個分區表&#xff0c;按list分區&#xff0c;只有一個本地唯一索引&#xff0c;沒有外鍵和觸發器 當單個分區數量在2000萬以內時&#xff0c;insert效率還可以&#xff0c;每秒2.3-2.5萬條 但數據量越大&#xff0c;速度越慢&#xff0c; 目前單個分區數量達到3億&#xff…

【轉】WPF自定義控件與樣式(3)-TextBox RichTextBox PasswordBox樣式、水印、Label標簽、功能擴展...

一&#xff0e;前言.預覽 申明&#xff1a;WPF自定義控件與樣式是一個系列文章&#xff0c;前后是有些關聯的&#xff0c;但大多是按照由簡到繁的順序逐步發布的等。 本文主要是對文本輸入控件進行樣式開發&#xff0c;及相關擴展功能開發&#xff0c;主要內容包括&#xff1a;…

JVM調優 dump文件怎么生成和分析

1、獲取JVM的dump文件的兩種方式   1. JVM啟動時增加兩個參數: #出現 OOME 時生成堆 dump: -XX:HeapDumpOnOutOfMemoryError #生成堆文件地址&#xff1a; -XX:HeapDumpPath/home/liuke/jvmlogs/ 2. 發現程序異常前通過執行指令&#xff0c;直接生成當前JVM的dmp文件&#x…

關于 Oracle 分區索引的失效和重建

--創建測試表 SQL> create table t as select object_id,object_name from dba_objects;表已創建。SQL> select min(object_id),max(object_id) from t;MIN(OBJECT_ID) MAX(OBJECT_ID)-------------- --------------2 76083SQL> create table t_part(object…

【網絡安全/CTF】unseping 江蘇工匠杯

該題考察序列化反序列化及Linux命令執行相關知識。 題目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($thi…

yum配置中driver-class-name: com.mysql.jdbc.Driver報錯

錯誤&#xff1a; 原因&#xff1a; 解決方法&#xff1a;把方框中的<scope>runtime</scope>刪掉 轉載于:https://www.cnblogs.com/zly123/p/10834958.html

gitlab中的CI

https://blog.csdn.net/chengzi_comm/article/details/78778284 轉載于:https://www.cnblogs.com/effortsing/p/10142720.html

增加表空間大小的四種方法

增加表空間大小的四種方法Meathod1&#xff1a;給表空間增加數據文件ALTER TABLESPACE app_data ADD DATAFILED:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF SIZE 50M;Meathod2&#xff1a;新增數據文件&#xff0c;并且允許數據文件自動增長ALTER TABLESPACE app_data …

Red Hat 8.0中設置光盤為軟件源

為什么80%的碼農都做不了架構師&#xff1f;>>> 以管理員身份登錄 su 編輯設置軟件源的repo文件 gedit /etc/yum.repos.d/redhat.repo 粘貼如下文本至空白處&#xff1a; [InstallMedia] nameRed Hat Enterprise Linux 8.0.0 mediaidNone metadata_expire-1 gpgche…

C++11并發編程:多線程std::thread

一&#xff1a;概述 C11引入了thread類&#xff0c;大大降低了多線程使用的復雜度&#xff0c;原先使用多線程只能用系統的API&#xff0c;無法解決跨平臺問題&#xff0c;一套代碼平臺移植&#xff0c;對應多線程代碼也必須要修改。現在在C11中只需使用語言層面的thread可以解…

圖像特征提取——韋伯局部描述符(WLD)

一、原理及概述 韋伯局部描述符&#xff08;WLD&#xff09;是一種魯棒性好、簡單高效的局部特征描述符。WLD由兩個部分組成&#xff1a;差分激勵和梯度方向。 其具體算法是對于給定的一幅圖像&#xff0c;通過對每個像素進行這兩個分量的計算來提取其差分激勵圖像和梯度方向圖…

Linux下Nagios的安裝與配置

Linux下Nagios的安裝與配置 一、Nagios簡介 Nagios是一款開源的電腦系統和網絡監視工具&#xff0c;能有效監控Windows、Linux和Unix的主機狀態&#xff0c;交換機路由器等網絡設置&#xff0c;打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員&am…

POJ_3262 Protecting the Flowers 【貪心】

一、題面 POJ3262 二、分析 這題要往貪心上面想應該還是很容易的&#xff0c;但問題是要證明為什么比值關系就能滿足。 可以選擇幾個去分析&#xff0c;入1-6 與 2-15 和 1-6 與2-5 和 1-6 與 2- 12。 三、AC代碼 1 #include <cstdio>2 #include <iostream>3 #in…

WebLogic安裝Linux centos7

一、安裝前準備工作&#xff1a; 1、創建用戶useradd weblogic;創建用戶成功linux系統會自動創建一個和用戶名相同的分組&#xff0c;并將該用戶分到改組中。并會在/home路徑下創建一個和用戶名相同的路徑&#xff0c;比如我們創建的weblogic。 注&#xff1a;當然&#xff0…

jquery如何阻止子元素繼承父元素的事件(又稱事件冒泡)

非常簡單&#xff0c;子元素上添加如下代碼即可 1 $(a).click(function(e){ 2 e.stopPropagation(); 3 }); 老版本為event,現在用e就行 轉載于:https://www.cnblogs.com/chengbo2130/p/10152747.html

java spring cloud 版 b2b2c 社交電商-服務消費者(Feign)

社交電商平臺源碼請加企鵝求求&#xff1a;一零三八七七四六二六。Feign是一個聲明式的偽Http客戶端&#xff0c;它使得寫Http客戶端變得更簡單。使用Feign&#xff0c;只需要創建一個接口并注解。它具有可插拔的注解特性&#xff0c;可使用Feign 注解和JAX-RS注解。Feign支持可…

Mybaits自定義SQL

最近有個同事要包裝一個可以執行sql語句的功能用的是mybatis 最開始他想到的方案是拿到數據庫連接再執行sql語句。 后來出了某些錯誤來問我&#xff0c;為了尋求比較快的解決方法于是我就試試了下下面的方法。 首先在Mapper添加 <select id"select" resultMap&qu…

Beta 沖刺 (7/7)

團隊信息 隊名&#xff1a;爸爸餓了組長博客&#xff1a;here作業博客&#xff1a;here組員情況 組員1&#xff08;組長&#xff09;&#xff1a;王彬 過去兩天完成了哪些任務 協助完成安卓端的整合完成安卓端的美化協助制作宣傳視頻 接下來的計劃 & 還剩下哪些任務 I am d…