-- 分表:订单表order采用年月分表后,出order本身外还生成order_202101、order_202102等的子表 -- 分表在逻辑上是多张不同的表,而分区表在逻辑上是一张表 --分区的条件(建议): -- 表数据量大于2GB -- 新增的数据都是插入最新分区中(一个典型的例子:新分区用于数据插入与修改,历史分区只用于读取操作) -- 分区的好处 --提高数据可用性 --消除分区:优化器在查询时有需要的去除未用到的分区 --减少停机时间:仅需要回复某个分区的表远小于回复整个数据库的表(100GB的表与50个2GB的分区) --方便管理:操作小对象比操作大对象容器,占用的资源更少 --改善语句性能 -- 分区表机制 select * from user_tab_partitions t where lower(t.table_name) = 'dave_range_exp'; --1)范围分区 Range create table dave_range_exp( id varchar(16), create_date date, data varchar(32) ) partition by range(create_date) ( partition Jan values less than ( to_date('20210201', 'yyyymmdd')), partition Feb values less than ( to_date('20210301', 'yyyymmdd')), partition Mar values less than ( to_date('20210401', 'yyyymmdd')), partition Apr values less than ( to_date('20210501', 'yyyymmdd')), partition May values less than ( to_date('20210601', 'yyyymmdd')), partition Jun values less than ( to_date('20210701', 'yyyymmdd')), partition Jul values less than ( to_date('20210801', 'yyyymmdd')), partition Aug values less than ( to_date('20210901', 'yyyymmdd')), partition Sep values less than ( to_date('20211001', 'yyyymmdd')), partition Oct values less than ( to_date('20211101', 'yyyymmdd')), partition Nov values less than ( to_date('20211201', 'yyyymmdd')), partition Dec values less than (maxvalue) ); insert into dave_range_exp values('20081202020001', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试1'); insert into dave_range_exp values('20081202020002', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试2'); insert into dave_range_exp values('20081202020003', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试3'); insert into dave_range_exp values('20081202020004', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试4'); insert into dave_range_exp values('20081202020005', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试5'); insert into dave_range_exp values('20081202020006', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试6'); insert into dave_range_exp values('20081202020007', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试7'); insert into dave_range_exp values('20081202020008', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试8'); insert into dave_range_exp values('20081202020009', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试9'); insert into dave_range_exp values('20081202020010', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试10'); select * from dave_range_exp partition(Jan) order by data; -- 2) 散列分区 -- oracle建议分区是2的一个幂(如2,4,8,16等) create table dave_hash_exp( id varchar(16), create_date date, data varchar(32) ) partition by hash(create_date) ( partition part_1, partition part_2 ); insert into dave_hash_exp values('20081202020001', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试1'); insert into dave_hash_exp values('20081202020002', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试2'); insert into dave_hash_exp values('20081202020003', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试3'); insert into dave_hash_exp values('20081202020004', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试4'); insert into dave_hash_exp values('20081202020005', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试5'); insert into dave_hash_exp values('20081202020006', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试6'); insert into dave_hash_exp values('20081202020007', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试7'); insert into dave_hash_exp values('20081202020008', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试8'); insert into dave_hash_exp values('20081202020009', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试9'); insert into dave_hash_exp values('20081202020010', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试10'); select * from dave_hash_exp partition(part_1) order by data; --3) 列表分区 create table dave_list_exp( id varchar(16), create_date date, data varchar(32) ) partition by list(id) ( partition part_1 values ('20081202020001', '20081202020002', '20081202020003', '20081202020004', '20081202020005'), partition part_2 values ('20081202020006', '20081202020007', '20081202020008'), partition part_3 values ('20081202020009', '20081202020010') ); insert into dave_list_exp values('20081202020001', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试1'); insert into dave_list_exp values('20081202020002', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试2'); insert into dave_list_exp values('20081202020003', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试3'); insert into dave_list_exp values('20081202020004', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试4'); insert into dave_list_exp values('20081202020005', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试5'); insert into dave_list_exp values('20081202020006', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '测试6'); insert into dave_list_exp values('20081202020007', to_date('2021-01-26','yyyy-mm-dd hh24:mi:ss'), '测试7'); insert into dave_list_exp values('20081202020008', to_date('2021-02-28','yyyy-mm-dd hh24:mi:ss'), '测试8'); insert into dave_list_exp values('20081202020009', to_date('2021-03-25','yyyy-mm-dd hh24:mi:ss'), '测试9'); insert into dave_list_exp values('20081202020010', to_date('2021-04-21','yyyy-mm-dd hh24:mi:ss'), '测试10'); select * from dave_list_exp partition(part_1) order by data; --4) 组合分区 -- 9i版本的oracle只支持2种复合分区,即range-hash和range-list -- 11g版本的oracle增加了4种复合分区,即range-range、list-range、list-list、list-hash create table dave_list_list_exp( id varchar(16), create_date date, data varchar(32) ) partition by list(id) subpartition by list(data) ( partition part_1 values ('340000000' ) ( subpartition part_1_sub_1 values('2020'), subpartition part_1_sub_2 values('2021'), subpartition part_1_sub_3 values('2022'), subpartition part_1_sub_4 values('2023') ), partition part_2 values ('340000001' ) ( subpartition part_2_sub_1 values('2020'), subpartition part_2_sub_2 values('2021'), subpartition part_2_sub_3 values('2022'), subpartition part_2_sub_4 values('2023') ), partition part_3 values ('340000002' ) ( subpartition part_3_sub_1 values('2020'), subpartition part_3_sub_2 values('2021'), subpartition part_3_sub_3 values('2022'), subpartition part_3_sub_4 values('2023') ) ); insert into dave_list_list_exp values('340000000', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000000', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000000', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000000', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000000', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000000', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000000', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); insert into dave_list_list_exp values('340000000', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); insert into dave_list_list_exp values('340000001', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000001', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000001', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000001', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000001', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000001', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000001', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); insert into dave_list_list_exp values('340000001', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); insert into dave_list_list_exp values('340000002', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000002', to_date('2021-01-28','yyyy-mm-dd hh24:mi:ss'), '2020'); insert into dave_list_list_exp values('340000002', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000002', to_date('2021-01-29','yyyy-mm-dd hh24:mi:ss'), '2021'); insert into dave_list_list_exp values('340000002', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000002', to_date('2021-01-30','yyyy-mm-dd hh24:mi:ss'), '2022'); insert into dave_list_list_exp values('340000002', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); insert into dave_list_list_exp values('340000002', to_date('2021-01-31','yyyy-mm-dd hh24:mi:ss'), '2023'); -- 查询分区数据 select * from dave_list_list_exp partition(part_1); select * from dave_list_list_exp subpartition(part_1_sub_2); drop table dave_range_emp; drop table dave_hash_exp; drop table dave_list_exp; drop table dave_list_list_exp;