数据库分区表关联

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


相关推荐

  • python产生随机数-详解用python生成随机数的几种方法[通俗易懂]

    python产生随机数-详解用python生成随机数的几种方法[通俗易懂]今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1从给定参数的正态分布中生成随机数当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,就可以调用pytho…

    2022年10月4日
    1
  • 协方差的计算方法

    协方差的计算方法版权声明 本文绝大部分转自 CSDN 博主 lslrh 123 文章 在此感谢 原文链接 https blog csdn net lslrh 123 article details 协方差的定义对于一般的分布 直接代入 E X 之类的就可以计算出来了 但真给你一个具体数值的分布 要计算协方差矩阵 根据这个公式来计算 还真不容易反应过来 网上值得参考的资料也不多 这里用一个例子

    2025年11月30日
    4
  • gmapping matlab实现_gmapping学习

    gmapping matlab实现_gmapping学习一、机器人地图机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图1、栅格地图栅格地图栅格地图,在物流信息技术中有所涉猎,其就是构建一个个“小方块”,利用颜色信息来区分的地图的位置信息。在机器人建图中,栅格地图容易构建,表示且保存位置的唯一,对于短路径的规划方便;但栅格地图的路径规划效率不高,空间浪费(栅格的分辨率不依赖于环境的复杂度)并且也需要精确的机器人位置估计,其对于物体识别的人机交互问…

    2022年6月16日
    35
  • jQuery模拟打字逐字输出代码

    效果查看:http://hovertree.com/texiao/jquery/70/jQuery键盘打出逐字逐句显示特效,逐字逐句显示文字还可以设置每个文字随机颜色:http://hovert

    2021年12月24日
    42
  • c++字符串转int_python中lower的用法

    c++字符串转int_python中lower的用法在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long和int范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了。不同的编

    2025年8月24日
    4
  • Mybatis和ibatis的区别

    Mybatis和ibatis的区别1、Mybatis实现了接口绑定,使用更加方便。在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mybatis最重要的改进。注意:虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,不过

    2025年6月23日
    2

发表回复

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

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