日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分区索引常用命令

發(fā)布時(shí)間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分区索引常用命令 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一般使用LOCAL索引較為方便,而且維護(hù)代價(jià)較低,并且LOCAL索引是在分區(qū)的基礎(chǔ)上去創(chuàng)建索引,類似于在一個(gè)子表內(nèi)部去創(chuàng)建索引,這樣開銷主要是區(qū)分分區(qū)上,很規(guī)范的管理起來,在OLAP系統(tǒng)中應(yīng)用很廣泛;而相對(duì)的GLOBAL索引是全局類型的索引,根據(jù)實(shí)際情況可以調(diào)整分區(qū)的類別,而并非按照分區(qū)結(jié)構(gòu)一一定義,相對(duì)維護(hù)代價(jià)較高一些,在OLTP環(huán)境用得相對(duì)較多,這里所謂OLTP和OLAP也是相對(duì)的,不是特殊的項(xiàng)目,沒有絕對(duì)的劃分概念,在應(yīng)用過程中依據(jù)實(shí)際情況而定,來提高整體的運(yùn)行性能。

3、常用視圖:
1、查詢當(dāng)前用戶下有哪些是分區(qū)表:
SELECT * FROM USER_PART_TABLES;

2、查詢當(dāng)前用戶下有哪些分區(qū)索引:
SELECT * FROM USER_PART_INDEXES;


3、查詢當(dāng)前用戶下分區(qū)索引的分區(qū)信息:
SELECT * FROM USER_IND_PARTITIONS T
WHERE T.INDEX_NAME=?

4、查詢當(dāng)前用戶下分區(qū)表的分區(qū)信息:
SELECT * FROM USER_TAB_PARTITIONS T
WHERE T.TABLE_NAME=?;

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


6、查詢索引、表上在那些列上創(chuàng)建了分區(qū):
SELECT * FROM USER_PART_KEY_COLUMNS;


7、查詢某用戶下二級(jí)分區(qū)的信息(只有創(chuàng)建了二級(jí)分區(qū)才有數(shù)據(jù)):
SELECT * FROM USER_TAB_SUBPARTITIONS;

4、維護(hù)操作:
4.1、刪除分區(qū)
? ? ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_03;
? ???如果是全局索引,因?yàn)槿炙饕姆謪^(qū)結(jié)構(gòu)和表可以不一致,若不一致的情況下,會(huì)導(dǎo)致整個(gè)全局索引失效,在刪除分區(qū)的時(shí)候,語句修改為:
? ???ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_03 UPDATE GLOBAL INDEXES;


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


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

4.4、創(chuàng)建新的分區(qū)(分區(qū)數(shù)據(jù)若不能提供范圍,則插入時(shí)會(huì)報(bào)錯(cuò),需要增加分區(qū)來擴(kuò)大范圍)
一般有擴(kuò)展分區(qū)的是都是用分隔的方式,若上述創(chuàng)建表時(shí)沒有創(chuàng)建TAB_PARTOTION_OTHER分區(qū)時(shí),在插入數(shù)據(jù)較大時(shí)(按照上述建立規(guī)則,超過1800000就應(yīng)該創(chuàng)建新的分區(qū)來存儲(chǔ)),就可以創(chuàng)建新的分區(qū),如:
為了試驗(yàn),我們將擴(kuò)展分區(qū)先刪除掉再創(chuàng)建新的分區(qū)(因?yàn)镺RACLE要求,分區(qū)的數(shù)據(jù)不允許重疊,即按照分區(qū)字段同樣的數(shù)據(jù)不能同時(shí)存儲(chǔ)在不同的分區(qū)中):
ALTER TABLE TABLE_PARTITION DROP PARTITION TAB_PARTOTION_OTHER;
ALTER TABLE TABLE_PARTITION ADD PARTITION TAB_PARTOTION_06 VALUES LESS THAN(2500000);


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

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

4.6、交換分區(qū)(快速交換數(shù)據(jù),其實(shí)是交換段名稱指針)
??首先創(chuàng)建一個(gè)交換表,和原表結(jié)構(gòu)相同,如果有數(shù)據(jù),必須符合所交換對(duì)應(yīng)分區(qū)的條件:
CREATE TABLE TABLE_PARTITION_2
??AS SELECT * FROM TABLE_PARTITION WHERE 1=2;
??然后將第一個(gè)分區(qū)的數(shù)據(jù)交換出去
ALTER TABLE TABLE_PARTITION EXCHANGE PARTITION TAB_PARTOTION_01
??WITH TABLE TABLE_PARTITION_2 INCLUDING INDEXES;?
??此時(shí)會(huì)發(fā)現(xiàn)第一個(gè)分區(qū)的數(shù)據(jù)和表TABLE_PARTITION_2做了瞬間交換,比TRUNCATE還要快,因?yàn)檫@個(gè)過程沒有進(jìn)行數(shù)據(jù)轉(zhuǎn)存,只是段名稱的修改過程,和實(shí)際的數(shù)據(jù)量沒有關(guān)系。

??如果是子分區(qū)也可以與外部的表進(jìn)行交換,只需要將關(guān)鍵字修改為:SUBPARTITION 即可。

4.7、清空分區(qū)數(shù)據(jù)
? ?ALTER TABLE <table_name> TRUNCATE PARTITION <partition_name>;
? ?ALTER TABLE <table_name> TRUNCATE subpartition <subpartition_name>;

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


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

10、分區(qū)表重新分析以及索引重新分析
??對(duì)表進(jìn)行壓縮后,需要對(duì)表和索引進(jìn)行重新分析,對(duì)表進(jìn)行重新分析,一般有兩種方式:
??在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即可,不過一般比較常用的是重新編譯:
??對(duì)于分區(qū)表并進(jìn)行了索引分區(qū)的情況,需要對(duì)每個(gè)分區(qū)的索引進(jìn)行重新編譯,這里以LOCAL索引為例子(其每個(gè)索引的分區(qū)和表分區(qū)結(jié)構(gòu)相同,默認(rèn)分區(qū)名稱和表分區(qū)名稱相同):
ALTER INDEX <index_name> REBUILD PARTITION <partition_name>;
??對(duì)于全局索引,根據(jù)全局索引鎖定義的分區(qū)名稱修改即可,若沒有分區(qū),和普通單表索引重新編譯方式相同:
ALTER INDEX <index_name> REBUILD;


11、關(guān)聯(lián)對(duì)象重新編譯,
??上述對(duì)表、索引進(jìn)行重新編譯,尤其對(duì)表進(jìn)行了壓縮后會(huì)產(chǎn)生行遷移,這個(gè)過程可能會(huì)導(dǎo)致一些視圖、過程對(duì)象的失效,此時(shí)要將其重新編譯一次。


12、擴(kuò)展:HASH分區(qū)中,如果創(chuàng)建了新的分區(qū),可以將其進(jìn)行重新HASH分布:
ALTER TABLE <table_name> COALESCA PARTITION%?

5、回歸總結(jié):何時(shí)建分區(qū),分區(qū)類別,索引,如何對(duì)應(yīng)[url=]SQL[/url]

1、創(chuàng)建時(shí)機(jī)

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

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


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


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

? ???GLOBAL不分區(qū)索引一般不太推薦,因?yàn)槭怯靡活w大的 索引樹 來映射一個(gè)表,這個(gè)過程,這樣速度不見得比不分區(qū)快。
? ???GLOBAL分區(qū)索引,查找數(shù)據(jù)若通過要通過索引,是先定位了索引內(nèi)部的分區(qū),然后在這個(gè)分區(qū)索引中找到ROWID,然后回表提取數(shù)據(jù)。
? ???LOCAL索引是和分區(qū)的個(gè)數(shù)逐個(gè)對(duì)應(yīng)的,可以說先定位分區(qū)表的分區(qū)也可以說先定位索引的分區(qū),因?yàn)樗麄兪且灰粚?duì)應(yīng)的,找到對(duì)應(yīng)分區(qū)后,分區(qū)內(nèi)部索引數(shù)據(jù)集合。

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

總結(jié)

以上是生活随笔為你收集整理的分区索引常用命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。