当 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. C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件

    参考:http://blog.csdn.net/kongwei521/article/details/51167903#

  2. java 获取参数泛型类型

    import java.lang.reflect.ParameterizedType; public abstract class SampleObjectCallBack<T> { pr ...

  3. C#绘制三角形并填充,使用winform实现qq聊天气泡

    首先是需求,需要制作一个聊天气泡, 但是winform中有没有类似Android的.9图,只有自己设计图形拼接气泡. 第一种是绘制空心三角形,第二种是绘制三角形区域,可以指定RGB颜色. privat ...

  4. 编辑距离算法(Levenshtein)

    编辑距离定义: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数. 许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如 ...

  5. C语言 · 判断回文

    算法提高 判断回文   时间限制:1.0s   内存限制:512.0MB      编程判断一个字符串是否是回文,当字符串是回文时,输出字符串:yes!,否则输出字符串:no!.所谓回文即正向与反向的 ...

  6. sam9260 adc 头文件

    /* * driver/char/at91_adc.h * * Copyright (C) 2007 Embedall Technology Co., Ltd. * * Analog-to-digit ...

  7. 腾讯云CentOS7.0使用yum安装mysql

    背景: 今天才申请了腾讯云+校园计划的1元服务器,(https://www.qcloud.com/event/qcloudSchool)安装了Centos7.0,在安装mysql的时候,使用yum l ...

  8. Could not read symbols解决方法

    Could not read symbols 陈运文 Could not read symbols:Linux/UNIX系统下编译时,常见的一类报错信息. 通常情况下,该编译报错信息之前会给出出现错误 ...

  9. Php5.5新特性 Generators详解

    在PHP5.5.0版本中,新增了生成器(Generators)特性,用于简化实现迭代器接口(Iterator)创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据, ...

  10. 微信小程序——页面中调用组件方法

    我现在有一个弹层的组件(popup),组件里面定义了显示组件(showPopup)和隐藏组件(hidePopup)的方法. 我们如何在调用组件的页面中调用组件里面的方法呢? 在调用组件的页面写如下代码 ...