• mysql-partition


    表分区 partition

    当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低.

    可不可以把表的数据分开在几张表上?

    1: 从业务角度可以解决. (分表)

    比如, 通过id%10 , user0 , user1....user9, 10张表

    根据不同的余数,来插入或查询某张表.

    2: 通过mysql的分区功能

    mysql将会根据指定的规则,把数据放在不同的表文件上.

    相当于在文件上,被拆成了小块.

    但是,给客户的界面,还是1张表.

    常用的规则:

    根据某列的范围来分区, 也可以某列的散点值来分区.

     

    示例: 按列的范围来分区

    以用户表为例, uid

    uid [1,10)  ---> user partition u0

    uid[10, 20) ---> user partition u1

    uid [20, MAX] --> user partion u2

    分区 range分区

     create table goods (
    
     id int,
    
     uname char(10)
    
     )engine myisam
    
     partition by range(id) (
    
     partition p1 values less than (10),
    
     partition p2 values less than (20),
    
     partition p3 values less than MAXVALUE
    
     );
    

    按散点值分区

    有一张省表

    pid 主键

    prov 省名

    1

    北京

    2

    安徽

    ...

    35

    西藏

    user ,想按省来分区,

    uid 主键

    pid 省份

    uname 用户名

    1

    1

    张北京

    15

    2

    赵安徽

    create table user (
    
    uid int,
    
    pid int,
    
    uname 
    
    )engine myisam
    
    partition by list(pid) (
    
    partition bj values in (1),
    
    partition ah values in (2),
    
    partition xb values in (4,5,6)
    
    );
    

    注意: 在使用分区的时候,注意,分区的那个列,值不要为NULL 

    (如果不小心为NULL,mysql为理解为0,尽量执行之)

    :分区甚至可以按照表达式的返回值,计算所属区

    但用表达式,不如直接用值来得快. 根据情况而定.

    比如, partition by range (year(regtime)) 可以按注册年份来分区.

  • 相关阅读:
    记录Log4Net的使用
    利用Ihttpmodel实现网站缓存,解决Server.Transfer 直接输出HTML源代码的问题
    ASP.NET利用byte检测上传图片安全
    通过cmd命令安装、卸载、启动和停止Windows Service(InstallUtil.exe)-大壮他哥
    winform利用代码将控件置于顶端底端
    查询
    字符数组实例化
    三维数组
    填充和批量替换
    遍历二维数组
  • 原文地址:https://www.cnblogs.com/phper007/p/3565179.html
Copyright © 2020-2023  润新知