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 条件;  

    参考资料:

  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/riches/p/11475270.html
Copyright © 2011-2022 走看看