分区表是什么?

分区表可以按照事先创建的规则,对mysql的记录进行分组,每一个组具有一个独立的逻辑单元来存储该组的数据。典型的如:按照创建时间的年份分组,按照id的顺序分组(每1000万条数据分一个组)

如果不分区,mysql也能正常工作,但是如果数据量大某些查询会很慢。

分区表的优势,也就是为什么myql官方要加入分区表的理由:

分区表对于按照分区的key来查询时,是有优化过的,可以并行地在不同分区查找数据,然后做集合统一输出。

典型地是,有冷热数据区分的表(比如按照年份来划分分区),历史数据和最新数据不再使用同一个分区,这样查询最新数据时不再全表查找,仅仅需要在最新的数据对应的分区上查找记录就可以了。比如100万条数据,分了5个区,那么原先需要查找100万,现在只需要查找1个分区,20万的数据。处理速度成倍的加快。

mysql支持哪些分区方式?

1,range:id在A到B之间使用0分区;

2,list:类似于enum,值是散列的固定的几个,比如性别1,2可以放在不同分区;

3,hash:按照hash的结果做分区标识,比如hash( id DIV 1000),每1000个元素划为一个分区;

4,key:不再详细介绍,使用时自查

5,子分区:不再详细介绍,自己查阅下资料

具体每种的分区方式的创建语法,可以参考:https://www.qcloud.com/community/article/624840

实践

1,创建hash分区表;

2,查看分区表的分区信息(分区名,行数);

3,和未分区时,使用select是否有区别;

【创建分区表】
#说明:创建id除以10的整数值作为一个分区,也就是按序插入每10条数据划分为1个分区,partitions 10表示创建10个分区
create table sms_partition(id int unsigned not null auto_increment, message varchar() not null default '', primary key(`id`)) engine=InnoDB partition by hash(id DIV ) partitions ; 【插入数据】
insert into sms_partition (message) values(""),(""), ("" ), ( ""), (""), (""), (""), (""), ("");
insert into sms_partition (message) values(""),(""), ("" ), ( ""), (""), (""), (""), (""), ("");
insert into sms_partition (message) values(""),(""), ("" ), ( ""), (""), (""), (""), (""), ("");
【查看下分区对应表的信息】
#可以看到分区表从p0开始创建10个,一直到p9,每个分区对应的记录条数也会列在其中
mysql> select PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='sms_partition';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p0 | 9 |
| p1 | 10 |
| p2 | 10 |
| p3 | 10 |
| p4 | 10 |
| p5 | 10 |
| p6 | 4 |
| p7 | 0 |
| p8 | 0 |
| p9 | 0 |
+----------------+------------+
10 rows in set (0.01 sec)
【查询1】
mysql> select count() from sms_partition where id >= and id <=;
+----------+
| count() |
+----------+
| |
+----------+
【解释查询】
mysql> explain partitions select count() from sms_partition where id >= and id <=;
+----+-------------+---------------+------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------------+-------+---------------+---------+---------+------+------+--------------------------+
| | SIMPLE | sms_partition | p0,p1,p2 | range | PRIMARY | PRIMARY | | NULL | | Using where; Using index |
+----+-------------+---------------+------------+-------+---------------+---------+---------+------+------+--------------------------+

11

特别地,典型使用场景是:

1,按年切分,使用hash(year)来分区;

2,按性别切分,可以把用户散列按性别散列在不同分区表中,可以用list;

【mysql】分区表的更多相关文章

  1. MySQL 分区表

    转载自MySQL 分区表 今天统计数据的时候发现一张表使用了表分区,借此机会记录一下. 1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分.从逻辑上看, ...

  2. Mysql --分区表的管理与维护

    改变一个表的分区方案只需使用alter table 加 partition_options 子句就可以了.和创建分区表时的create table语句很像 创建表 CREATE TABLE trb3 ...

  3. 数据切分——Mysql分区表的管理与维护

    关于Mysql分区表的介绍可以参考: http://blog.csdn.net/jhq0113/article/details/44592865 关于Mysql分区表的创建可以参考: http://b ...

  4. 数据切分——Mysql分区表的建立及性能分析

    Mysql的安装方法可以参考: http://blog.csdn.net/jhq0113/article/details/43812895 Mysql分区表的介绍可以参考: http://blog.c ...

  5. MySQL分区表基础

    首先要确定MySQL是否支持分区: Mysql> SHOW VARIABLES LIKE '%partition%'; +-----------------------+-------+| Va ...

  6. (3) MySQL分区表使用方法

    1. 确认MySQL服务器是否支持分区表 命令: show plugins; 2. MySQL分区表的特点 在逻辑上为一个表,在物理上存储在多个文件中 HASH分区(HASH) HASH分区的特点 根 ...

  7. MySQL 分区表原理及数据备份转移实战

    MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...

  8. MYSQL分区表功能测试简析

    1.查看Mysql版本是否支持分区  SHOW VARIABLES LIKE '%partition%';   +-------------------+-------+ | Variable_nam ...

  9. 详解MySQL分区表

    当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种: 1.分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多. 优点:提高并发量,减小锁的 ...

  10. MySQL分区表使用方法

    原文:MySQL分区表使用方法 1. 确认MySQL服务器是否支持分区表 命令: show plugins; 2. MySQL分区表的特点 在逻辑上为一个表,在物理上存储在多个文件中 HASH分区(H ...

随机推荐

  1. centos7 操作记录

    centos7 firewall 命令查看已经开放的端口firewall-cmd --list-ports查看开放的服务firewall-cmd --list-services开启端口firewall ...

  2. 使用dig或nslookup指定dns服务器查询域名解析

    一般来说linux下查询域名解析有两种选择,nslookup或者dig,而在使用上我觉得dig更加方便顺手.如果是在linux下的话,只要装上dnsutils这个包就可以使用dig命令, 安装bind ...

  3. 使用arguments对象验证函数的参数是否合法

    <script>function sum(arg1,arg2) //加法函数{ var realArgCount = arguments.length; //调用函数时传递的实参个数 va ...

  4. JS代码注释

    1.css和js都可以使用/**/进行注释 2.html使用<!---->注释 3.单行js代码可以使用//进行注释 <!DOCTYPE html> <html lang ...

  5. Roslyn Cookbook

    Roslyn Cookbook by Manish Vasani Publisher: Packt Publishing Release Date: July 2017 ISBN: 978178728 ...

  6. 远程批量查看windosws操作系统3389端口的开放情况

    本文只提供思想.具体可以根椐情况拓展. 前提是需要配置远程主机的SNMP协议.主要是共同体哟. 脚本使用: 1.拷贝check_tcp到脚本执行的主机中或在此主机中安装nagios; 2.保持list ...

  7. 2019.2.4 nfs原理和安装实验

    NFS 访问一个本地文件还是NFS共享文件对于客户端而言都是透明的,当文件打开的瞬间,内核会作出一个决定,如果是本地文件内核会将本地NFS共享文件内核会将NFS共享文件的所有引用传递给——>NF ...

  8. CSS 字体术语

    字体有些术语需要了解. 衬线字体 衬线字体指的是有衬线的字体,又称为有衬线体.衬线字.曲线描边字,俗称白体字. 衬线指的是字形笔画末端的装饰细节部分. 衬线字体便于阅读,通常用于长篇文本. 常见的衬线 ...

  9. Oracle数据库操作总是显示运行中无法成功,删除表时报错 resource busy and acquire with NOWAIT specified

    1.直接运行以下语句: select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2wh ...

  10. Python基础学习Day5 字典的增、删、改、查的用法 分别赋值

    一.字典的介绍 字典:字典是Python的基础数据类型之一:字典可以存储大量数据,关系型数据. 同样是Python中唯一的映射类数据类型.         数据类型的分类:        可变的数据类 ...