zoukankan      html  css  js  c++  java
  • mysql表分区 partition

    表分区 partition
    当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.
    可不可以把表的数据分开在几张表上?
    
    1: 从业务角度可以解决.. (分表,水平分割),比如, 通过id%10 , user0 , user1....user9, 这10张表 根据不同的余数,来插入或查询某张表.
    
    2: 通过mysql的分区功能,而不是通过代码来控制,再建表的时候指定分区的规则,mysql将会根据指定的规则,把数据放在不同的表文件上,相当于在文件上,被拆成了小块.但是,给客户的界面,还是1张表.对用户来说是透明的。
    
    常用的规则:一般是根据某列的范围来分区, 也可以某列的散点值来分区.
    
    示例: 按列的范围来分区
    以用户表为例, uid
    uid [1,100万)  ---> user partition u0 放在第一张表里
    uid[100万, 200万) ---> user partition u1 放在第二张表里
    uid [200万, MAX] --> user partion u2  放在第三张表里
    分区 按range范围分区,根据id的范围来分区,
     create table goods (
     id int,
     uname char(10)
     )engine myisam
     partition by range(id) (
     partition p1 values less than (10),                  //id小于10的在一个区域
     partition p2 values less than (20),                  //id小于20的在一个区域
     partition p3 values less than MAXVALUE       //其他在p3
     );

    按散点值分区
    有一张省表
    create table area(
    aid int,
    zone char(10)
    )engine myisam;
    
    insert into area values (1,’bj’),(2,’ah’),(3,’xb’);

    pid 主键

    prov 省名

    1

    北京

    2

    安徽

    ...

    35

    西藏

    user ,按省来拆分,

    uid 主键

    pid 省份

    uname 用户名

    1

    1

    张北京

    15

    2

    赵安徽

     
    create table user (
    uid int,
    aid int,
    uname char(10)
    )engine myisam
    partition by list(aid) (
    partition bj values in (1),
    partition ah values in (2),
    partition xb values in (4,5,6)
    );
    //7是没有的区,会报错。
    insert into user values (1,1,’11’),(2,2,’22’),(3,4,’44’),(4,5,’55’),(5,6,’66’),(6,7,’77’);

    注意: 在使用分区的时候,注意,分区的那个列,值不要为NULL 
    (如果不小心为NULL,mysql为理解为0,尽量执行之)
    
    
    注 :分区甚至可以按照表达式的返回值,计算所属区. 
    但用表达式,不如直接用值来得快. 根据情况而定.
    
    比如,用 partition by range (year(regtime)) 可以按注册年份来分区.
  • 相关阅读:
    python 的rjust函数
    二叉树
    实验四 系统调用
    实验三:跟踪分析Linux内核的启动过程
    ZigZag Conversion1
    Oracle数据文件管理
    Java中hashcode,equals和==
    浅析Java中HashMap的实现
    迷宫(栈,堆,队列)
    TCP/IP的三次握手协议
  • 原文地址:https://www.cnblogs.com/yaowen/p/8301816.html
Copyright © 2011-2022 走看看