zoukankan      html  css  js  c++  java
  • Oracle学习(十四)分表分区

    一、前言

    大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机,在尝试添加索引及查询方式修改后,还有没有更有效的解决方案呢?

    分库、分表、分区这些概念咱就应该了解一下。

    二、分表

    假如一个大型商城有一个订购关系表,每个用户的订单都落在这个表里面,那么时间一长,要进行查询的时候,肯定慢得要死,这样的系统给客户用,那就凉凉思密达了...

    拆分思想

    咱可以对这个总表进行拆分,例如对年进行拆分,每个年表只存一年的记录,那么这样数据就分散开来了,每个表的数据就少很多,根据具体情况还可以按月分,按日分等等...

    PS:注意,分表使用时,查询语句里要进行动态拼装查询的表名。

    三、分区

    简介

    年表创建过后,查询就是查询年表中的数据,可是虽然分表了,但是年表中的数据量仍然很大,查询速度虽然有提升,但并不能满足用户的要求,此时考虑在年表中再根据月份进行分区。

    定义

    表分区后,逻辑上仍然是一张表,只不过将表中的数据在物理上存放到多个表空间

    目的

    这样在查询数据时,会查询相应分区的数据,减少SQL操作的数据量,避免了全表扫描,从而提升查询效率

    水平分区

    进行分区,举个例子来说,就是一个表中有1000万条数据,每100万条数据划一个分区,这样就将表中数据分到10个分区中去。

    PS:水平分区要通过某个特定的属性列进行分区,如用时间先orderBy后再分区。

    垂直分区

    进行分区,减少表的宽度,从而提升查询效率。

    比如一个学生表中,有他相关的信息列,还有论文列以CLOB存储,可以把这些不经常使用的CLOB划分到另一个分区,需要访问时再调用它。

    代码样例

    --水平分区
    
    --按照订单时间进行水平分区
    CREATE TABLE ORDER_ACTIVITIES   
    (   
        ORDER_ID      NUMBER(7) NOT NULL,   
        ORDER_DATE    DATE,   
        TOTAL_AMOUNT NUMBER,   
        CUSTOTMER_ID NUMBER(7),   
        PAID   CHAR(1)   
    )   
    PARTITION BY RANGE (ORDER_DATE)   
    (  
      PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACE ORD_TS01,  
      PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,  
      PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03  
    );  
    
    --按省份进行分区
    CREATE  TABLE  ListTable  
    (   
        id    INT  PRIMARY  KEY ,   
        name  VARCHAR (20),   
        area  VARCHAR (10)   
    )   
    PARTITION  BY  LIST (area)   
    (   
        PARTITION  part1 VALUES ('guangdong','beijing') TABLESPACE  Part1_tb,   
        PARTITION  part2 VALUES ('shanghai','nanjing')  TABLESPACE  Part2_tb   
    );  
    
    
    --垂直分区
    
    PS:垂直分区思路是将写入操作比较频繁的数据表,把这个两个表分离出来,放在不同的服务器
    PS:可以理解为外键的关联方式(不知道准不准确...)

    --查询分区数据
    select * from 表 partition(分区名) where 条件;  

    参考资料:

  • 相关阅读:
    Android UI(四)云通讯录项目之云端更新进度条实现
    [Java 泥水匠] Java Components 之一:Java String (肯定有你不懂的)
    Android UI(三)SlidingMenu实现滑动菜单(详细 官方)
    Android UI(二)DridView的菜单
    Android UI(一)Layout 背景局部Shape圆角设计
    Singly linked list algorithm implemented by Java
    Servlet JSP 二重修炼:Filter过滤器
    HDU 1006 Digital Roots
    2012-2014 三年浙江 acm 省赛 题目 分类
    HDU 1006 Tick and Tick 时钟指针问题
  • 原文地址:https://www.cnblogs.com/riches/p/11475270.html
Copyright © 2011-2022 走看看