在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)
測試結論:針對範圍分割槽索引:
(1)ADD PARTITION
==>增加分割槽不影響本地、全域性索引狀態
(2)DROP/TRUNCATE PARTITION
==>在分割槽內無資料時不影響本地、全域性索引狀態;
==>在分割槽內有資料時全域性索引unusable,本地索引不受影響;
使用update indexes或update global indexes都可以避免全域性索引unusable
(3)SPLIT PARTITION
==>在分割槽內無資料時不影響本地、全域性索引狀態;
==>在分割槽內有資料時,如改操作涉及資料移動,本地和全域性索引都變為unusable;本地索引需要使用alter index idx_name rebuild partition part_name方式重建。
使用update indexes可以避免本地和全域性索引unusable;
使用update global indexes可以避免全域性索引unusable,但本地索引變為unusable
1,建立測試表
create table test(id int,x varchar2(100))
partition by range(id)
(
partition p1 values less than (100),
partition p2 values less than (200),
partition p3 values less than (300)
);
create index idx_test_id on test(id) local;
create index idx_test_x on test(x);
--使用者物件
set linesize 200
col object_name for a30
col subobjet_name for a15
col object_id for 999999999999
col data_object_id for 99999999999
col object_type for a15
select object_name,subobject_name,object_id,data_object_id,object_type from user_objects;
OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
------------------------------ ------------------------------ ------------- -------------- ---------------
TEST P3 156124 156124 TABLE PARTITION
TEST P2 156123 156123 TABLE PARTITION
TEST P1 156122 156122 TABLE PARTITION
TEST 156121 TABLE
IDX_TEST_ID P3 156128 156128 INDEX PARTITION
IDX_TEST_ID P2 156127 156127 INDEX PARTITION
IDX_TEST_ID P1 156126 156126 INDEX PARTITION
IDX_TEST_ID 156125 INDEX
IDX_TEST_X 156129 156129 INDEX
9 rows selected.
--索引資訊
col index_name for a30
col index_type for a15
col table_name for a30
col status for a20
col partitioned for a10
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
--分割槽索引資訊
col partitioning_type for a10
col partition_count for 9999
col locality for a15
col alignment for a25
select index_name,table_name,partitioning_type,partition_count,locality,alignment from user_part_indexes;
INDEX_NAME TABLE_NAME PARTITIONI PARTITION_COUNT LOCALITY ALIGNMENT
------------------------------ ------------------------------ ---------- --------------- --------------- -------------------------
IDX_TEST_ID TEST RANGE 3 LOCAL PREFIXED
--索引分割槽狀態
col partition_name for a15
col partition_position for 999
col status for a20
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P3 3 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P2 2 USABLE
2,ADD PARTITION
alter table test
add partition p4 values less than(400);
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P3 3 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P2 2 USABLE
IDX_TEST_ID P4 4 USABLE
==>ADD PARTITION不影響本地和全域性索引的狀態
3,DROP PARTITION
3.1分割槽內無資料(從未插入)
alter table test
drop partition p2;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P3 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P4 3 USABLE
==>drop PARTITION在分割槽內無資料的情況下不影響本地和全域性索引的狀態
3.2分割槽內無資料(插入後刪除)
insert into test values(290,'p3');
commit;
col x for a30
select * from test partition(p3);
ID X
---------- ----------
290 p3
delete from test where id=290;
commit;
alter table test
drop partition p3;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P4 2 USABLE
==>drop PARTITION在分割槽內無資料的情況下不影響本地和全域性索引的狀態
3.3分割槽內有資料
--為了建立同樣的刪除情況,建立一些分割槽
alter table test
add partition p5 values less than(500);
alter table test
add partition p6 values less than(600);
3.3.1 直接刪除分割槽
insert into test values(390,'p4');
commit;
col x for a30
select * from test partition(p4);
ID X
---------- ------------------------------
390 p4
alter table test
drop partition p4;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST UNUSABLE NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P5 2 USABLE
IDX_TEST_ID P6 3 USABLE
IDX_TEST_ID P1 1 USABLE
==>drop PARTITION在分割槽內有資料的情況下不影響本地索引狀態,但全域性索引狀態變為UNUSABLE
--需要rebuild全域性索引
alter index IDX_TEST_X rebuild;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
3.3.2 刪除分割槽+update indexes
insert into test values(490,'p5');
commit;
select * from test partition(p5);
ID X
---------- ------------------------------
490 p5
alter table test
drop partition p5 update indexes;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P6 2 USABLE
IDX_TEST_ID P1 1 USABLE
==>drop PARTITION+update indexes在分割槽內有資料的情況下不影響本地和全域性索引的狀態
3.3.3 刪除分割槽+update global indexes
--為了建立同樣的刪除情況,建立一些分割槽
alter table test
add partition p7 values less than(700);
alter table test
add partition p8 values less than(800);
alter table test
add partition p9 values less than(900);
insert into test values(590,'p6');
commit;
select * from test partition(p6);
ID X
---------- ------------------------------
590 p6
alter table test
drop partition p6 update global indexes;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
7 rows selected.
==>drop PARTITION+update global indexes在分割槽內有資料的情況下不影響本地和全域性索引的狀態
4,TRUNCATE PARTITION
4.1分割槽內無資料(從未插入)
alter table test
truncate partition p7;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
==>truncate PARTITION在分割槽內無資料的情況下不影響本地和全域性索引的狀態
4.2分割槽內無資料(插入後刪除)
insert into test values(690,'p7');
commit;
delete from test where id=690;
commit;
select * from test partition(p7);
no rows selected
alter table test
truncate partition p7;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
7 rows selected.
--本地、全域性索引狀態不變
4.3分割槽內有資料
4.3.1 直接TRUNCATE分割槽
insert into test values(690,'p7');
commit;
select * from test partition(p7);
ID X
---------- ------------------------------
690 p7
alter table test
truncate partition p7;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST UNUSABLE NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
7 rows selected.
--全域性索引狀態變為UNUSABLE,需要rebuild
alter index IDX_TEST_X rebuild;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
4.3.2 TRUNCATE分割槽+update indexes
insert into test values(690,'p7');
commit;
select * from test partition(p7);
ID X
---------- ------------------------------
690 p7
alter table test
truncate partition p7 update indexes;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
7 rows selected.
--本地、全域性索引狀態不變
4.3.3 TRUNCATE分割槽+update global indexes
insert into test values(690,'p7');
commit;
select * from test partition(p7);
ID X
---------- ------------------------------
690 p7
alter table test
truncate partition p7 update global indexes;
select index_name,index_type,table_name,status,partitioned from user_indexes;
INDEX_NAME INDEX_TYPE TABLE_NAME STATUS PARTITIONE
------------------------------ --------------- ------------------------------ -------------------- ----------
IDX_TEST_X NORMAL TEST VALID NO
IDX_TEST_ID NORMAL TEST N/A YES
select index_name,partition_name,partition_position,status from user_ind_partitions;
INDEX_NAME PARTITION_NAME PARTITION_POSITION STATUS
------------------------------ --------------- ------------------ --------------------
IDX_TEST_ID P7 2 USABLE
IDX_TEST_ID P1 1 USABLE
IDX_TEST_ID P8 3 USABLE
IDX_TEST_ID P9 4 USABLE
7 rows selected.
--本地、全域性索引狀態不變
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-755143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- 範圍分割槽
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- 檢視分割槽範圍
- 移動分割槽表和分割槽索引的表空間索引
- PG的非分割槽表線上轉分割槽表
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- oracle分割槽表和分割槽表exchangeOracle
- Hive的靜態分割槽與動態分割槽Hive
- 增加表分割槽時,為local分割槽索引指定不同表空間的方法索引
- SSD固態硬碟要分割槽嗎?SSD固態硬碟分割槽與不分割槽的效能對比硬碟
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- Spark操作Hive分割槽表SparkHive
- MySql資料分割槽操作之新增分割槽操作MySql
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- 在分割槽表上使用正確的索引來提高效能索引
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 非分割槽錶轉換成分割槽表
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- 對oracle分割槽表的理解整理Oracle
- 【MYSQL】 分割槽表MySql
- Hive中靜態分割槽和動態分割槽總結Hive
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- zabbix上對mysql資料庫做分割槽表MySql資料庫
- Hive動態分割槽Hive
- SQL Server大分割槽表沒有空分割槽的情況下如何擴充套件分割槽的方法SQLServer套件
- MySQL 分割槽表探索MySql