数据库分区表关联

数据库分区表关联数据库表分区场景: 现实业务中有两个表关系比较紧密,而且数据量比较大的时候,需要对两个表都进行分区,并能很好的发挥分表作用创建分区数据库表注意: 数据库表最好是在创建的时候就进行分区,不能对已经创建的普通表(堆表)再进行分区变为分区表,否则转换起来比较麻烦。createtableOCS_COLLECT_PEOPLE(COLLECT_IDV

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

数据库表分区

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

创建分区数据库表

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

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')

数据库表分区

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

创建分区数据库表

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

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.net/135630.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月3日 下午8:00
下一篇 2022年5月3日 下午8:00


相关推荐

  • springboot配置多个yml_spring几种配置方式

    springboot配置多个yml_spring几种配置方式YMLrabbitmq:first:username:${app.appkey}password:${app.appkey}virtual-host:${app.appid}addresses:x.x.x.x:5672,x.x.x.x:5672second:username:guestpassword:guestvirtual-host:/host:12

    2022年10月3日
    7
  • 新版Pycharm中Matplotlib图像不在弹出独立的显示窗口「建议收藏」

    新版Pycharm中Matplotlib图像不在弹出独立的显示窗口「建议收藏」官方说明链接:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000736584-SciView-in-PyCharm-2017-3-reduces-functionality-of-Matplotlibpycharm从2017.3版之后,将matplotlib的绘图的结果默认显示在SciView窗口中…

    2022年8月27日
    7
  • SpringBoot 配置文件的静态装配「建议收藏」

    SpringBoot 配置文件的静态装配「建议收藏」上一篇讲了配置文件的自动装配,这一片讲一下静态装配 importlombok.Data;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@Component@Configurati

    2025年7月22日
    6
  • dropdownlist绑定数据_containsall方法

    dropdownlist绑定数据_containsall方法前台<asp:DropDownListID=”DDL_Gly”runat=”server”AutoPostBack=”True”OnSelectedIndexChanged=”DDL_Gly_Change”></asp:DropDownList><asp:HiddenFieldID=”hf…

    2025年10月27日
    4
  • 分布式系统常见问题总结[通俗易懂]

    分布式系统常见问题总结[通俗易懂]秒杀系统架构优化思路一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,…

    2022年5月20日
    40
  • java判断闰年的方法_Java判断闰年的2种方法示例|chu「建议收藏」

    java判断闰年的方法_Java判断闰年的2种方法示例|chu「建议收藏」前言:给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:1.年份是4的倍数而不是100的倍数;2.年份是400的倍数。其他的年份都不是闰年。方法一:publicclassBissextile{booleanbissextile(intyear){//创建boolean类型的方法if(year%4==0&&year%1…

    2022年7月17日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号