• MySQL 数据库表分区


    1.分区分表对比

    优点:
    1.分区分表都能突破磁盘I/O的瓶颈,提高数据的读写速度以及扩大数据的存储数量
    2.分区主要提高了磁盘的读写速度,而分表不仅提高了磁盘的读写速度,还提升了单表的并发能力
    应用场景: 1.分区主要适用于访问量不大但是数据很多的表,而分表适用于访问量很大而且数据量又多的场景
    难易程度: 2.分区最为简单,对程序基本上是透明的;而分表相对复杂,其中使用merge分表又最为简单,对程序透明

    2.分区使用场景

    1.表非常大,以至于无法全部放入内存中,或者只在表的最后部分有热点数据,其他均是历史数据
    
    2.分区表的数据更容易维护。例如,想批量删除大量数据可以使用清楚整个分区的方式。另外,还可以对一个独立分区,进行优化,检查,修复等操作
    
    3.分区表的数据可以分布在不同的物理设备上,从而高效率的利用多个硬件设备
    
    4.可以使用分区表来避免某系特殊的瓶颈,例如,InnoDB的单个索引的互斥访问,ext3文件系统的inode锁竞争
    
    5.备份和恢复独立的分区

    3.分区局限

    1.一个表最多只能有1024个分区
    
    2.在5.1中,分区表达式必须是整数,或者是返回整数的表达式。在MySQL5.5中,某些场景可以直接使用列来进行分区
    
    3.表中如果存在主键或者唯一键,则分区字段必须使用主键或者唯一键;详细讲解参见:http://www.ligphp.com/post/76.html
    
    4.分区表中无法使用外键约束

    4.分区策略

    1.range分区:基于一个给定的连续区间范围(区间要求连续并且不能重叠),把数据分配到不同的分区,支持分区字段为整数,但使用RANGE COLUMNS分区就支持非整数分区 创建日期分区就不需要通过函数进行转换(范围 between)
    2.list分区:类似于range分区,区别在于list分区是居于枚举出的值列表分区,range是基于给定的连续区间范围分区(枚举 in)
    3.hash分区:基于给定的分区个数,把数据分配到不同的分区;(hash分区其实就是取模运算,比如5%4余1所以去到p1分区,因此只支持分区字段为数字,字串则不行 to)
    4.key分区:类似于hash分区,支持除text和BLOB之外的分区字段,只有指定分区数目为质数,才能保证每个分区都有数据

     5.分区基础操作

    1.对已有表进行分区
    ALTER TABLE user PARTITION BY RANGE ( id ) (
    PARTITION u0
    VALUES
        LESS THAN ( 2 ),
        PARTITION u1
    VALUES
        LESS THAN ( 3 ),
        PARTITION u2
    VALUES
        LESS THAN MAXVALUE 
        );
    
    2.查询分区    
    SELECT
        partition_name part,
        partition_expression expr,
        partition_description descr,
        FROM_DAYS( partition_description ) lessthan_sendtime,
        table_rows 
    FROM
        INFORMATION_SCHEMA.PARTITIONS 
    WHERE
        TABLE_SCHEMA = SCHEMA ( ) 
        AND TABLE_NAME = 'user';
    3.创建表时分区
    create table t_range( 
         id int(11), 
         money int(11) unsigned not null, 
         date datetime 
      )partition by range(year(date))( #需要通过函数进行转换
      partition p2007 values less than (2008), 
      partition p2008 values less than (2009), 
      partition p2009 values less than (2010) 
      partition p2010 values less than maxvalue  #MAXVALUE 表示最大的可能的整数值
    );

    4.MySQLslap数据库测试

    mysqlslap 
      -uroot -pxxx 
      --concurrency=10 
      --iterations=10 
      --auto-generate-sql-load-type=read 
      --engine=InnoDB 
      --create-schema=database
      --number-of-queries=10 
      --query='select * from xxx where xxx = 1;'
  • 相关阅读:
    获得每天的日期流水 函数
    sql调用web服务
    Sql 查询当天、本周、本月记录
    从首页问答标题到问答详情页
    首页列表显示全部问答,完成问答详情页布局
    制作首页的显示列表。
    发布功能完成
    登录之后更新导航
    完成登录功能,用session记住用户名
    完成注册功能
  • 原文地址:https://www.cnblogs.com/lzj123/p/10418321.html
Copyright © 2020-2023  润新知