数据库分区表关联

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • phpstom 激活码2021(最新序列号破解)

    phpstom 激活码2021(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • linux系添加路由,Linux添加路由的两种方法「建议收藏」

    linux系添加路由,Linux添加路由的两种方法「建议收藏」Linux中增加软路由的两种方法第一种:routeadd-net172.16.6.0netmask255.255.255.0gw172.16.2.254deveth0/*增加一条网络172.16.6.0/24经过172.16.2.254eth0*//*-net增加网络-host增加主机netmask子网掩码gw网关dev装置,设备,这里是你的网卡名*/ro…

  • 大数据建模步骤有哪些

    大数据建模步骤有哪些  数据建模,通俗地说,就是通过建立数据科学模型的手段解决现实问题的过程。数据建模也可以称为数据科学项目的过程,并且这个过程是周期性循环的,也是是我们在做数据分析的时候会经常使用的一种数据分析方法,那么大数据建模都有哪些步骤。  1)数据测量  数据测量包括ECU内部数据获取,车内总线数据获取以及模拟量数据获取,特别是对于新能源汽车电机、逆变器和整流器等设备频率高达100KHz的信号测量,ETAS提供完整的解决方案。  2)大数据管理与分析  目前的汽车嵌入式控制系统…

  • keil中debug的使用_keil 多线程

    keil中debug的使用_keil 多线程在点这个之前要先烧写一次程序,不然这一次修改后的程序没有烧进单片机里然后在debug模式下点运行,然后再点停止如果代码有问题就会停在有问题的地方不断循环多试几次如果都停在同一个地方就是那里的代码有问题…

    2022年10月15日
  • 对java中bean的理解

    对java中bean的理解简单笼统的说就是一个类,一个可复用的类。javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后我会提供获取属性和设置属性的get/set方法JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将

  • Java猿社区—ShardingSphere-4.0.1之实现读写分离[通俗易懂]

    Java猿社区—ShardingSphere-4.0.1之实现读写分离[通俗易懂]Java猿社区—ShardingSphere-4.0.1之实现读写分离文章目录Java猿社区—ShardingSphere-4.0.1之实现读写分离技术体系背景ShardingSphere介绍注意事项ShardingShpere支持的功能数据分片分布式事务技术准备mysql安装配置POM配置读写分离——一主双从mysql配置环境sql脚本配置读写分离application.propertiesM…

发表回复

您的电子邮箱地址不会被公开。

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