oracle表分区详解
2021/5/21 19:28:29
本文主要是介绍oracle表分区详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概念
当表中数量不断增大时,查询速度很很慢,这时候应该考虑对表进行分区
表分区之后逻辑上还是一张完整的表,只是将表中数据在物理上存放到多个位置上,这样在查询时不至于每次都扫描整张表
优点
1)提高查询速度,可以只对某个分区进行搜索而不是搜索整张表
2)解耦,如果某个分区出现故障,其他分区仍然可以使用
3)维护方便,如果某个分区出现故障,那么只修复该分区即可
4)通过分布存储表数据,可以平衡IO,改善整个系统的性能
分区表的种类
1)范围分区
范围分区是基于范围将数据映射到每个分区,这种分区方式最常用,通常分区键使用日期,当然也可以是其他
例如
按行分区
SQL> CREATE TABLE part_andy1 ( andy_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, PHONE VARCHAR2(15) NOT NULL, EMAIL VARCHAR2(80), STATUS CHAR(1) ) PARTITION BY RANGE (andy_ID) ( PARTITION PART1 VALUES LESS THAN (10000) , PARTITION PART2 VALUES LESS THAN (20000) );
按时间分区
SQL> CREATE TABLE part_andy2 ( ORDER_ID NUMBER(7) NOT NULL, ORDER_DATE DATE, OTAL_AMOUNT NUMBER, CUSTOTMER_ID NUMBER(7), PAID CHAR(1) ) PARTITION BY RANGE (ORDER_DATE) ( PARTITION p1 VALUES LESS THAN (TO_DATE('2014-10-1', 'yyyy-mm-dd')) , PARTITION p2 VALUES LESS THAN (TO_DATE('2015-10-1', 'yyyy-mm-dd')) , PARTITION p3 VALUES LESS THAN (TO_DATE('2016-10-1', 'yyyy-mm-dd')) , partition p4 values less than (maxvalue) );
2)Hash分区
通过hash算法计算出某条数据应该放在哪个分区,在oracle如果使用hash分区只需要指定分区的数量即可,一般建议分区的数量是2的n次方,这样数据会更加均匀
--按hash分区 SQL> create table part_andy3 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null 5 ) 6 partition by hash(transaction_id) 7 ( 8 partition part_01 , 9 partition part_02 , 10 partition part_03 11 );
3)list分区
创建list分区时需要确定列中可能存在的值,通常在使用list分区时需要创建一个default分区存储那些不在指定范围内的记录
-- 按list分区 SQL> create table part_andy4 2 ( 3 id varchar2(15 byte) not null, 4 city varchar2(20) 5 ) 6 partition by list (city) 7 ( 8 partition t_list025 values ('beijing'), 9 partition t_list372 values ('shanghai') , 10 partition t_list510 values ('changsha'), 11 partition p_other values (default) 12 );
4)组合分区
即是上面三种分区的组合
这篇关于oracle表分区详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享