数据库分区表关联

数据库分区表关联数据库表分区场景: 现实业务中有两个表关系比较紧密,而且数据量比较大的时候,需要对两个表都进行分区,并能很好的发挥分表作用创建分区数据库表注意: 数据库表最好是在创建的时候就进行分区,不能对已经创建的普通表(堆表)再进行分区变为分区表,否则转换起来比较麻烦。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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ETL开发工具KETTLE使用教程「建议收藏」

    ETL开发工具KETTLE使用教程「建议收藏」Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录。若存在,则更新。Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个…

    2022年6月3日
    408
  • 小程序-微信开发者工具使用教程_小程序开发教程

    小程序-微信开发者工具使用教程_小程序开发教程一、开始开发小程序的第一步,你需要拥有一个小程序帐号,通过这个帐号你就可以管理你的小程序。跟随这个教程,开始你的小程序之旅吧!二、申请帐号进入小程序注册页 (https://mp.w

    2022年8月1日
    4
  • 安卓学习之-ActivityManager

    安卓学习之-ActivityManagerActivityManager.MemoryInfo:系统可用内存信息ActivityManager.RecentTaskInfo:最近的任务信息ActivityManager.RunningAppProcessInfo:正在运行的进程信息ActivityManager.RunningServiceInfo:正在运行的服务信息

    2025年9月28日
    2
  • Java8:LocalDate LocalDateTime Date相互转化

    Java8:LocalDate LocalDateTime Date相互转化概述时间日期处理是平时工作中使用非常频繁的逻辑,Java8中提供的新的时间类LocalDateTime和LocalDate,使日期处理可以更简单。友情提醒下,业务开发中最好默认使用LocalDateTime,因为LocalDateTime可以很方便的转换为LocalDate,但是LocalDate是不可以转为LocalDateTime的,会没有时分秒的数据!!!实例publicstaticvoidmain(String[]args){StringcurrentDate

    2022年9月28日
    5
  • HTML中的空格字符_dw空格代码怎么打

    HTML中的空格字符_dw空格代码怎么打在学习插入空格字符代码书写方法之前,我们要知道,html代码的空格字符,在浏览器中,总会被压缩为一个字符!也就是说,你在html文本中输入多个空格,但在浏览器中,只会保留显示一个字符,其余的都将被浏览器删除。再打个比如,你在html中输入了8个空格字符,如下图所示:在显示之前,浏览器会删除其余7个,而只保留一个空格字符,如下图所示:也就是说,无论你输入多少个空格字符,在浏览器中显示的永远和上图一样…

    2022年9月2日
    3
  • python 列表转字符串[通俗易懂]

    python 列表转字符串[通俗易懂]python中list转字符串命令:”.join(list)其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等如:list=[1,2,3,4,5]”.join(list)结果即为:12345′,’.join(list)结果即为:1,2,3,4,5

    2022年6月13日
    26

发表回复

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

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