分区索引与全局索引的性能对比例子,前两个是索引基础介绍:
1、如果使用全局索引,当对某一个分区进行ddl操作时,该索引就无效了,必须重建,这一点比较麻烦。
注意:这里的索引失效是很严重的完全失效
2、如果索引字段是分区键(主要是range),那么就用local的。
3、如果索引字段是id、电话号码等类型的,那么就用global的。
4、如果分区间的数据是相互独立的,即不会被同时访问,使用local index 更好些。相反如果数据跨越多个分区,可能local index会更差些。
5、当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。
alter table t_partition_list drop partition t_list_p2 UPDATE GLOBAL INDEXES;
测试了一下分区删除的三种方式:
1. delete完数据再drop分区 (线上现有方式)
2. truncate分区数据再删除的方式
3. 直接drop分区
测试结果如下(数据量较大没有多次导入表,分别使用了3个分区进行测试,数据量大致在同一量级)
方法1 方法2 方法3
分区名称 P20151110 P20151111 P20151112
数据量 10503249 11835671 9248433
耗时 1:29:37 0:14:38 0:02:17
使用方法2和方法3删除分区时,都会堵塞当前分区的写操作,对其他分区无影响。
一般表的主键ID是全局索引,
删除分区:alter table [tbname] drop partition [ptname] UPDATE GLOBAL INDEXES ;
删除子分区:alter table [tbname] drop subpartition [ptname] UPDATE GLOBAL INDEXES;
除hash分区和hash子分区外,其它的分区格式都可以支持这项操作。 例如,删除分区:
SEAT> select table_name,partition_name
2 from user_tab_partitions where table_name='T_PARTITION_LIST';
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
T_PARTITION_LIST T_LIST_P1
T_PARTITION_LIST T_LIST_P2
T_PARTITION_LIST T_LIST_P3
T_PARTITION_LIST T_LIST_PD
SEAT> alter table t_partition_list drop partition t_list_p2 UPDATE GLOBAL INDEXES;
表已更改。
提示,drop partition时,该分区内存储的数据也将同时删除,例如:
SSWEB> insert into t_partition_list values (1,'a'); ..........
--插入一批记录,分布于当前各个分区 ..........
SEAT> commit;
提交完成。
SEAT> insert into t_partition_list values (1,'a'); ..........
--插入一批记录,分布于当前各个分区 ..........
SEAT> commit;
提交完成。
SEAT> select *from t_partition_list;
ID NAME
---------- --------------------------------------------------
1 a 2 b 21 a 22 b
--单独查询t_list_p3分区,当前有数据
SEAT> select *from t_partition_list partition(t_list_p3);
ID NAME
---------- --------------------------------------------------
21 a
22 b
--删除t_list_p3分区,数据会被同时删除
SEAT> alter table t_partition_list drop partition t_list_p3 UPDATE GLOBAL INDEXES;
表已更改。
SEAT> select *from t_partition_list partition(t_list_p3); select *from t_partition_list partition(t_list_p3)
* 第 1 行出现错误:
ORA-02149: 指定的分区不存在
--删除t_list_p3分区,数据会被同时删除
SEAT> alter table t_partition_list drop partition t_list_p3;
表已更改。
SEAT> select *from t_partition_list partition(t_list_p3); select *from t_partition_list partition(t_list_p3)
* 第 1 行出现错误:
ORA-02149: 指定的分区不存在
SEAT> select *from t_partition_list;
ID NAME
---------- --------------------------------------------------
同样,如果你在执行该语句时没有指定update indexes子句,也会导致glocal索引的失效,至于local索引嘛,删除分区时对应的索引分区会被同时删除,但其它分区的local索引不会受到影响。
附录:
drop partition就是清除分区及其数据和索引
truncated 就是先清除数据和索引但分区还在
性能我觉得应该没什么区别~看你的分区是否要保留了
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




