当 MySQL的总记录数超过了100万后,性能会大幅下降,可以采用分区方案

分区允许根据指定的规则,跨文件系统分配单个表的多个部分。表的不同部分在不同的位置被存储为单独的表。

1.先看下innodb的数据结构

(1)共享表空间的数据结构

create table t3(id int)engine innodb;

查看保存的文件t3.frm,ibdata1的文件,存放着所有的表额数据和索引

(2)独立表空间的数据结构

create table t2(id int)engine innodb;

查看保存的文件  

要对innodb进行分区操作,需要要设置innodb的表空间为独立表空间

如果以前不是独立表空间,在设置了innodb_file_per_table=1重启mysql后,使用alter table table_name engine=innodb;修改为独立表空间

2.分区的优势:

  (1)与单个磁盘或文件系统分区相比,可以存储更多的数据
  (2)很容易就能删除不用或者过时的数据
  (3)一些查询可以得到极大的优化
  (4)涉及到 SUM()/COUNT() 等聚合函数时,可以并行进行
  (5)IO吞吐量更大

分区的限制

  • 最大分区数目不能超过1024
  • 如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内
  • 不支持外键
  • 不支持全文索引(fulltext)

3.查看mysql是否支持分区

SHOW VARIABLES LIKE '%partition%'

  

或者用

SHOW PLUGINS;

 

4.分区类型

  (1)RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

  (2)LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

  (3)HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包>含MySQL中有效的、产生非负整数值的任何表达式。

    hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。

hash的分区函数页需要返回一个整数值。partitions子句中的值是一个非负整数,不加的partitions子句的话,默认为分区数为1。

  (4)KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含>整数值。

  (5)columns分区

  mysql-5.5开始支持COLUMNS分区,COLUMNS分区可以直接使用非整形数据进行分区。COLUMNS分区支持以下数据类型:
    所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。
    日期类型,如DATE和DATETIME。其余日期类型不支持。
    字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。
  COLUMNS可以使用多个列进行分区。

eg:

create table t(
id int
)engine innodb
partition by hash(id)
partitions 4;

查看一个该表的文件结构

t表实现的分区,分成了4个分区

注:

  HASH分区不能删除分区,所以不能使用DROP PARTITION操作进行分区删除操作

  ALTER TABLE ... COALESCE PARTITION num来合并分区,num是减去的分区数量;

  ALTER TABLE ... ADD PARTITION PARTITIONS num来增加分区,num是在原先基础上再增加的分区数量

  减去两个分区后,数据根据现有的分区进行了重新的分布

ALTER TABLE t ADD PARTITION PARTITIONS 3;

ALTER TABLE t COALESCE PARTITION 3;

 

 

  

  

innodb分区的更多相关文章

  1. Mysql表分区的选择与实践小结

    在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表,分区来解决这些性能瓶颈. 一. 选择合适的解决方法 1. 分库分表. 分库 ...

  2. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  3. [MySQL Reference Manual] 20 分区

    20 分区 20 分区 20.1 MySQL的分区概述 20.2 分区类型 20.2.1 RANGE分区 20.2.2 LIST分区 20.2.3 COLUMNS分区 20.2.3.1 RANGE C ...

  4. Mysql数据库的使用总结之Innodb简介

     最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持.因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可.但也遇到了很多问题 ...

  5. Mysql 表分区

    是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...

  6. MySQL 分区介绍总结

    200 ? "200px" : this.width)!important;} --> 介绍 分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区 ...

  7. MySQL 指定各分区路径

    200 ? "200px" : this.width)!important;} --> 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定 ...

  8. MySQL学习笔记十三:表分区

    1.分区一般用于非常大的表,采用“分而治之”的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范围值,特定列值或HASH值等规则分布在不同的分区中. ...

  9. MySQL基于时间字段进行分区的方案总结

    MySQL支持的分区类型一共有四种:RANGE,LIST,HASH,KEY.其中,RANGE又可分为原生RANGE和RANGE COLUMNS,LIST分为原生LIST和LIST COLUMNS,HA ...

随机推荐

  1. TCP 和 UDP 在socket编程中的区别(转)

    一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UD ...

  2. led子系统

    最简单的led驱动就是从端口输出0或1来关闭或点亮灯.而我们这里讲的led子系统,主要是对led事件进行了分装和优化,这里我们主要讲的是可 以实现跨平台的led驱动.不管你是使用三星的平台,还是Atm ...

  3. SparkSQL---实战应用

    SparkSQL---实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat ...

  4. 妙用CTE,一条语句实现sql递归查询,SQLServer 递归

    数据库设计中经常碰到父子节点的关系结构,经常需要找到某个节点的根,或者某个节点的所有子节点,一般做法都是在业务层做递归的方式实现,或者数据库存储过程实现.但其实SQLServer提供的CTE可以很好的 ...

  5. Python Garbage Collection 与 Objective-C ARC

    转载请注明出处 http://blog.csdn.net/u014205968/article/details/69389363 Python GC 与 Objective-C ARC 提起GC(Ga ...

  6. MFC——CDC

    CDC类定义的是设备上下文对象的类,有称设备环境对象类. Windows使用与设备无关的图形设备环境(DC:Device Context)进行显示. 说到CDC类就不能不提一下GdiObject——图 ...

  7. JFinal的使用

    JFinal 中的Controller Controller是JFinal核心类之一,该类作为MVC模式中的控制器.基于JFinal的Web应用的控制器需要继承该类.Controller是定义Acti ...

  8. CSS条件注释

    由于浏览器版本的不同,对CSS里某些元素的解释也不一样,针对浏览器版本不同而选择不同CSS的代码,其实我们还可以利用条件注释的方法来达到类似的目的,什么是条件注释,在此简单介绍一下,无非就是一些if判 ...

  9. Jquery ThickBox的使用

    thickbox是jQuery的一个插件,其作用是弹出对话框.网页框,使用户体验度更加愉悦,下面就来简单介绍它的几种用法.声明一下:这只是个人的总结记载而已.准备工作:你需要三个文件:thickbox ...

  10. 初学Android的几个常见问题

    1.关于开发环境搭配,可以到网站http://developer.android.com/sdk/index.html下载adt-bundle-windows-x86-20131030.zip,里面包 ...