zoukankan      html  css  js  c++  java
  • MySQL优化之表分区

    1. 基本概念

    基本概念:把一个表,从逻辑上分成多个区域,便于存储数据。

    采用分区的前提:数据量非常大。

    比如一个用户表,想分成4个区域,如何分呢?

    用户的id 1到1000 分到 东区
    用户的id 1001到2000 分到 南区
    用户的id 2001到3000 分到 西区
    用户的id 大于3001的 分到 北区

    2. 创建语法

    create table user (
        // 创建表的语句
    )engine myisam charset utf8
    partition by 分区类型 (分区的关键字) (
        // 分区的项
    );

    3. 分区的类型

    (1)list:条件值为一个数据列表。

    通过预定义的列表的值来对数据进行分割

    例子:假如你创建一个如下的一个表,该表保存有全国20家分公司的职员记录,这20家分公司的编号从1到20。而这20家分公司分布在全国4个区域,如下表所示:

    职员表:id name store_id(分公司的id)

    北部 1,4,5,6,17,18
    南部 2,7,9,10,11,13
    东部 3,12,19,20
    西部 8,14,15,16

    create table p_list( 
        id int, 
        name varchar(32), 
        store_id int 
    )partition by list (store_id)( 
        partition p_north values in(1,4,5,6,17,18), 
        partition p_east values in(2,7,9,10,11,13), 
        partition p_south values in(3,12,19,20), 
        partition p_west values in(8,14,15,16) 
    );

    测试是否用到了分区:

    explain partitions select * from p_list where store_id=20G

    注意:在使用分区时,where后面的字段必须是分区字段,才能使用到分区。

    (2)Range(范围)

    这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区

    create table p_range(
        id int,
        name varchar(32),
        birthday date
    )partition by range (month(birthday))(
        partition p_1 values less than (3),
        partition p_2 values less than(6),
        partition p_3 values less than(9),
        partition p_4 values less than MAXVALUE
    );

    less than 小于等于
    MAXVALUE 可能的最大值

    4. 分区表的限制

    只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列,最大分区数目不能超过1024。

    如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。

    不支持外键

    不支持全文索引(fulltext)

    按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。

  • 相关阅读:
    python3 装饰器
    Python3 迭代器与生成器
    Python3 循环
    Python3 条件控制
    Python3 字典
    Python3 元组
    Python3 列表
    08.HttpUrlconnection方式调用
    南海区行政审批管理系统接口规范v0.3(规划)
    day63-webservice 11.cxf整合spring
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6681861.html
Copyright © 2011-2022 走看看