MySQL InnoDB,MyISAM, 和 NDB 存储引擎都支持分区。

分区的过程就是将一个表和索引分成多个小的部分;逻辑上讲只有一个表和索引,但实际上由多个物理分区组成。

这点和分表不同,分表实际上是将一张表数据根据某些业务字段存储在多个表中。

1、查询是否支持分区功能

使用查询语句:show PLUGINS 查看:

partition    ACTIVE    STORAGE ENGINE        GPL

2、分区类型

1)RANGE 分区

根据给定的连续区间的列值进行分区。

2)LIST 分区

根据离散的值进行分区,创建分区时必须指定。

3)HASH 分区

根据用户自定义的表达式的返回值进行分区,返回值不能为负值。

创建分区时, 用户只需要进行哈希分区的列值或表达式,MySQL 自动选择数据的分区。

4)KEY 分区

使用数据库提供的哈希函数进行分区。

3、分区的使用

RANGE 分区主要用于日期列的分区,例如按年份分区,

create table stock_order(
id int ,
store_id int,
price decimal(10,2),
order_time datetime not null
)engine=INNODB
PARTITION BY RANGE(year(order_time)) 
(PARTITION p2018 VALUES less than (2018),
PARTITION p2019 VALUES less than (2019),
PARTITION p2020 VALUES less than (2020));

往表中写入几条数据:

insert into stock_order values (1, 101, 50, str_to_date('2018-06-20 10:25:30','%Y-%m-%d %T'));
insert into stock_order values (2, 102, 30.50, str_to_date('2018-05-20 15:25:30','%Y-%m-%d %T'));
insert into stock_order values (10001, 101, 60, str_to_date('2019-05-20 14:25:30','%Y-%m-%d %T'));
insert into stock_order values (10002, 103, 35, str_to_date('2019-06-20 11:55:20','%Y-%m-%d %T'));

添加数据落在不存在的分区的话,会报错:

insert into stock_order values (10002, 103, 35, str_to_date('2021-06-20 11:55:20','%Y-%m-%d %T'));

错误提示:

[SQL] insert into stock_order values (10002, 103, 35, str_to_date('2021-06-20 11:55:20','%Y-%m-%d %T'));
[Err] 1526 - Table has no partition for value 2021

添加分区:

alter table stock_order add PARTITION(PARTITION p2021 values less than (2021))

alter table stock_order add PARTITION(PARTITION p2022 values less than (2022))

4、查看分区数据

select table_name,partition_name, table_rows 
from information_schema.`PARTITIONS`
where table_schema=DATABASE() and table_name='stock_order';

返回:

stock_order    p2018    0
stock_order    p2019    2
stock_order    p2020    2
stock_order    p2021    0
stock_order    p2022    0
stock_order    p2022    0

5、分区好处

1)删除分区数据很方便:

alter table book_order drop partition p2018;

2)查询数据落在某个分区的话,速度会提升:

EXPLAIN PARTITIONS
select * from stock_order 
where order_time <='2019-12-31' and order_time>='2019-01-01'

1    SIMPLE    stock_order    p2020    ALL                    2    Using where

6、分区限制

1)如果表中存在主键或者唯一索引时,分区列必须是唯一索引的一个组成部分;如果表没有主键和唯一索引,则任意列都可以为分区列。

2)RANGE 类型分区,优化器只能对year(), to_days(), to_seconds(), unix_timestamp()这些函数进行优化选择

MySQL 表分区 Partition相关推荐

  1. mysql按照省市给表分区_表分区-partition

    partition分区: 设置分区限制,t0:1-10,t1:10-20,t2:20-最大值: 插入数据后可以看到topic表出现了t0.t1.t2: 按照散点值分区: 创建地区表: 建立会员表,根据 ...

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

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表, ...

  4. 处理Zabbix历史数据库办法二---使用MySQL表分区

    一 应用场景描述 http://john88wang.blog.51cto.com/2165294/1770582 在前面介绍可以通过创建新表然后导入一个月内的数据到新表,最后删除旧表的方法来处理历史 ...

  5. mysql 表分区、按时间函数分区、删除分区、自动添加表分区

    mysql 表分区的几种方式: RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区. LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进 ...

  6. MySql表分区介绍

    一.什么是表分区 表分区就是就是把表的数据切分成不同的块进行存储,可以存储在不同的文件系统.而用户所选择的.实现数据分割的规则被称为分区函数,这在MySQL中它可以是模数,或者是简单的匹配一个连续的数 ...

  7. mysql 支持分区表,mysql表分区的限制

    头一次使用mysql表分区,遇到不少的问题,现在总结下遇到的问题和解决方案. 1.如果分区值类型不是整型值,会出现如下错误: [Err] 1697 - VALUES value for partiti ...

  8. MySQL表分区细节逻辑

    MySQL表分区细节逻辑 一.建表时进行分区 二.建表后进行分区(消耗资源巨大) 一.建表时进行分区 Range分区表建表语句如下,其中分区键必须和id构成主键和唯一键: create table i ...

  9. mysql 添加分区_创建,增加,删除mysql表分区

    1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no      INT NOT NULL, title        ...

最新文章

  1. python搜题程序_智慧树Python程序设计基础搜题公众号
  2. GitHub现在已支持函数定义跳转,妈妈再也不怕我记性差了
  3. 一步步编写操作系统 41 快表tlb 简介
  4. mysql max case连用_mysql 嵌套 case when 的问题
  5. BZOJ.3165.[HEOI2013]Segment(李超线段树)
  6. JME3中级手册--最佳实践1
  7. linux halcon 加密狗,不安装HALCON下安装运行版U盘加密狗驱动
  8. win10美化--打造专属我的windows
  9. Word把普通表格改为三线表格的方法
  10. 图片标注工具labeling的安装和使用
  11. 云存储服务OneDrive捆绑系统销售,30多家欧洲公司投诉微软垄断
  12. php开发天气可视化,R语言天气可视化应用 | 粉丝日志
  13. Photoshop制作宠物小精灵球主题图标教程
  14. MyBatis从入门到精通(一)—MyBatis基础知识和快速入门
  15. SQLPro Studio for Mac(可视化数据库管理工具)
  16. python安装anacondapanda_关于pandas:Pyarrow不安装python 3.7(anaconda 5.3.0,windows x64版本)...
  17. PCB Layout爬电距离、电气间隙的确定
  18. 针对局域网IM飞秋(feiq)的开发总结
  19. 西方经济学【微观】名词缩写整理
  20. 【计算机网络】计算机三级网络——需要理解的题

热门文章

  1. Nginx的主要函数调用关系分析
  2. 安卓平台OpenGL ES的调用
  3. A Brief Overview Of Vulkan API
  4. TensorFlow-RNN循环神经网络 Example 1:预测Sin函数
  5. Python中浅拷贝和深拷贝的理解与研究
  6. pandas.Series.rank用法详解
  7. PHP面向对象设计的五大原则
  8. 【Node】新手入门 基于Express,Sequelize、IIS的MVC项目
  9. 韩国巨型机器人曝光,走一步地动山摇
  10. AtCoder Regular Contest 080