前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库分区表关联

数据库分区表关联

作者头像
全栈程序员站长
发布2022-08-18 20:54:18
9730
发布2022-08-18 20:54:18
举报

大家好,又见面了,我是你们的朋友全栈君。

数据库表分区

场景: 现实业务中有两个表关系比较紧密,而且数据量比较大的时候,需要对两个表都进行分区,并能很好的发挥分表作用

创建分区数据库表

注意: 数据库表最好是在创建的时候就进行分区,不能对已经创建的普通表(堆表)再进行分区变为分区表,否则转换起来比较麻烦。

代码语言:javascript
复制
create table OCS_COLLECT_PEOPLE ( COLLECT_ID VARCHAR2(32) not null, PEOPLE_ID VARCHAR2(20) not null, PEOPLE_VERSION NUMBER(2) not null, ACCOUNT_VERSION NUMBER(2), PROJECT_ID VARCHAR2(20) not null, REGION_ID VARCHAR2(12) not null, BATCH_ID VARCHAR2(32) not null, MONEY NUMBER(12,3) not null, OPERATOR_ID VARCHAR2(16) not null, OPERATOR_TIME DATE not null, ASSIGN_ID VARCHAR2(30), AUDIT_ID VARCHAR2(25), PAY_ID VARCHAR2(30), STATUS NUMBER(2) not null ) PARTITION BY RANGE(OPERATOR_TIME) ( PARTITION CP_2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) tablespace XT_TEST_P1, PARTITION CP_2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD')) tablespace XT_TEST_P2 );



create table OCS_COLLECT_PEOPLE_PROP ( COLLECT_ID VARCHAR2(32) not null, FLOAT_VALUE NUMBER(12,3), INT_VALUE INTEGER, STR_VALUE VARCHAR2(100), DATE_VALUE DATE, PROP_NAME VARCHAR2(20) not null, OPERATOR_TIME DATE not null ) PARTITION BY RANGE(OPERATOR_TIME) ( PARTITION CPP_2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) tablespace XT_TEST_P1, PARTITION CPP_2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD')) tablespace XT_TEST_P2 );

使用比较

结论: 如果想使用两个表的分区功能,必须把两个表的分区字段使用上,才能达到最好效果,如果只使用一个表的分区字段,那么有一个表会使用分区优势,如下:

SELECT * FROM OCS_COLLECT_PEOPLE P,OCS_COLLECT_PEOPLE_PROP PP WHERE PP.OPERATOR_TIME=P.OPERATOR_TIME AND P.COLLECT_ID=PP.COLLECT_ID AND P.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD');--比下面的SQL好,从执行计划上看cardinality值和bytes值都小了许多SELECT * FROM OCS_COLLECT_PEOPLE P,OCS_COLLECT_PEOPLE_PROP PP WHERE PP.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD') AND P.COLLECT_ID=PP.COLLECT_ID AND P.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD')

数据库表分区

场景: 现实业务中有两个表关系比较紧密,而且数据量比较大的时候,需要对两个表都进行分区,并能很好的发挥分表作用

创建分区数据库表

注意: 数据库表最好是在创建的时候就进行分区,不能对已经创建的普通表(堆表)再进行分区变为分区表,否则转换起来比较麻烦。

代码语言:javascript
复制
create table OCS_COLLECT_PEOPLE ( COLLECT_ID VARCHAR2(32) not null, PEOPLE_ID VARCHAR2(20) not null, PEOPLE_VERSION NUMBER(2) not null, ACCOUNT_VERSION NUMBER(2), PROJECT_ID VARCHAR2(20) not null, REGION_ID VARCHAR2(12) not null, BATCH_ID VARCHAR2(32) not null, MONEY NUMBER(12,3) not null, OPERATOR_ID VARCHAR2(16) not null, OPERATOR_TIME DATE not null, ASSIGN_ID VARCHAR2(30), AUDIT_ID VARCHAR2(25), PAY_ID VARCHAR2(30), STATUS NUMBER(2) not null ) PARTITION BY RANGE(OPERATOR_TIME) ( PARTITION CP_2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) tablespace XT_TEST_P1, PARTITION CP_2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD')) tablespace XT_TEST_P2 );



create table OCS_COLLECT_PEOPLE_PROP ( COLLECT_ID VARCHAR2(32) not null, FLOAT_VALUE NUMBER(12,3), INT_VALUE INTEGER, STR_VALUE VARCHAR2(100), DATE_VALUE DATE, PROP_NAME VARCHAR2(20) not null, OPERATOR_TIME DATE not null ) PARTITION BY RANGE(OPERATOR_TIME) ( PARTITION CPP_2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) tablespace XT_TEST_P1, PARTITION CPP_2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD')) tablespace XT_TEST_P2 );

使用比较

结论: 如果想使用两个表的分区功能,必须把两个表的分区字段使用上,才能达到最好效果,如果只使用一个表的分区字段,那么有一个表会使用分区优势,如下:

SELECT * FROM OCS_COLLECT_PEOPLE P,OCS_COLLECT_PEOPLE_PROP PP WHERE PP.OPERATOR_TIME=P.OPERATOR_TIME AND P.COLLECT_ID=PP.COLLECT_ID AND P.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD');--比下面的SQL好,从执行计划上看cardinality值和bytes值都小了许多SELECT * FROM OCS_COLLECT_PEOPLE P,OCS_COLLECT_PEOPLE_PROP PP WHERE PP.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD') AND P.COLLECT_ID=PP.COLLECT_ID AND P.OPERATOR_TIME>TO_DATE('2013-01-01','YYYY-MM-DD')

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135630.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库表分区
    • 创建分区数据库表
      • 使用比较
      • 数据库表分区
        • 创建分区数据库表
          • 使用比较
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档