个人博客网:https://wushaopei.github.io/    (你想要这里多有)

一、MySQL分区表操作

1、定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件,在逻辑上表现为一个表;

2、表分区的弊端: 要谨慎选择分区键,错误的操作可能导致跨分区查询效率降低。

建议 采用物理分表的方式管理大数据。

3、确认MySQL服务器是否支持分区表

使用 SHOW PLUGINS;在mysql命令行查看是否具有分区表的功能:

查询结果中的"partition                | ACTIVE   | STORAGE ENGINE     | NULL    | GPL   "这一行代表当前数据库可以进行数据库分区表操作。

4、普通数据库表的物理结构与分区表的物理结构的区别:

左边为普通表的物理结构,右边为分区后的数据库表物理结构。

一、Hash分区表 (按HASH分区)

1、HASH分区的特点

根据MOD(分区键,分区数)的值把数据行存储到表的不同分区中,使数据可以平均的分布在各个分区中。

注意: HASH分区的键值必须是一个INT类型的值,或是通过函数可以转为INT类型。

2、创建HASH分区:

use hash;
CREATE TABLE `hash`.`customer_login_log`(
customer_id int UNSIGNED not null,
login_time TIMESTAMP,
login_ip int UNSIGNED,
login_type TINYINT NOT NULL
) PARTITION by hash(login_ip) PARTITIONS 6;

查看 customer_login_log 分区表物理结构:

customer_login_log 普通非分区表物理结构:

向HASH分区表customer_login_log中插入数据:

INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type)
VALUES (1,now(),11111,1);

查看分区表数据:

二、RANGE 分区表(按范围分区)

1、RANGE分区特点:

RANGE分区 是根据分区键值的范围把数据行存储到表的不同分区中,并且 多个分区的范围要连续,但是不能重叠

注意: 默认情况下使用VALUES LESS THAN属性,即每个分区不包括指定的那个值

2、创建RANGE分区表:

create table `customer_login_log`(
`customer_id` int(10) UNSIGNED not null,
`login_time` TIMESTAMP not null,
`login_ip` int(10) UNSIGNED not null,
`login_type` TINYINT(4) NOT NULL
) ENGINE=INNODB
PARTITION BY RANGE( customer_id)(
PARTITION P0 VALUES LESS THAN (10000),
PARTITION P1 VALUES LESS THAN (20000),
PARTITION P2 VALUES LESS THAN (30000),
PARTITION P3 VALUES LESS THAN MAXVALUE
)

分区范围说明

当插入的数据为30000到40000分区范围的数据时,没有创建分区范围为40000的分区的情况下,会返回错误提示;但,当存在图中p3分区的MAXVALUE这一分区时,所以没有指明分区范围的数据都会被插入到p3中

3、RANGE分区的使用场景

  • 分区键为日期或是时间类型
  • 所有查询中都包括分区键
  • 定期按分区范围清理历史数据

三、List分区(按分区键取值分区)

1、LIST分区的特点

定义: LIST分区按分区键取值的列表进行分区,并且同范围分区一样,各分区的列表只不能重复

注意:每一行数据必须能找到对应 分区列表,否则数据插入失败

2、创建LIST分区表:

create table `customer_login_log_list`(
`customer_id` int(10) UNSIGNED not null,
`login_time` TIMESTAMP not null,
`login_ip` int(10) UNSIGNED not null,
`login_type` TINYINT(4) NOT NULL
) ENGINE=INNODB
PARTITION BY LIST (login_type)(
PARTITION P0 VALUES IN (1,3,5,7,9),
PARTITION P1 VALUES IN (2,4,6,8)
)

插入包含未建立分区的分区键的值,会返回错误:

INSERT INTO customer_login_log_list(customer_id,login_time,login_ip,login_type)VALUES(100,now(),1,10)

错误截图:

根据login_type 的值进行分区 p0存储login_type为 1,3,5,7,9;p1存储login_type为2,4,6,8的数据,而插入的数据的login_type为10,不包含在p0或p1的login_type范围中,所以插入失败,返回错误提示。

高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区的更多相关文章

  1. 高性能可扩展mysql 笔记(一)数据库表、索引、SQL语句设计规范

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 项目说明:该笔记的背景为电商平台项目,电商项目由于其高并发.多线程.高耗能等特性,在众多的项目类型中涉及 ...

  2. 高性能可扩展mysql 笔记(四)项目分区表演示

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 登录日志的分区 如何为Customer_login_log表分区? 从以下两个业务场景入手: 用户每次登 ...

  3. 高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 常见业务处理 一.使用数据库处理常见业务: 案例: 如何对评论进行分页展示 使用 EXPLAIN 获得s ...

  4. 高性能可扩展mysql 笔记(五)商品实体、订单实体、DB规划

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.商品模块 ​ 商品实体信息所存储的表包括: 品牌信息表: create table `brand_i ...

  5. 高性能可扩展mysql 笔记(二)用户模型设计、用户实体表结构设计、设计范式

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.用户模型设计 电商羡慕中用户模型的设计涉及以下几个部分: ​ 以电商平台京东的登录.注册页面作为例: ...

  6. 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析

    ID:相同就从上而下,不同数字越大越优先

  7. mysql分区功能(三个文件储存一张表)(分区作用)(分区方式)

    mysql分区功能(三个文件储存一张表)(分区作用)(分区方式) 一.总结 1.mysql数据表的存储方式(三个文件储存一张表): 一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放 ...

  8. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  9. Mysql --分区表(6)Hash分区

    HASH分区 HASH分区主要用来分散热点读,确保数据在预先确定个数的分区中尽可能平均分布.对一个表执行HASH分区时,MySQL会对分区键应用一个散列函数,以此确定数据应当放在N个分区中的哪个分区 ...

随机推荐

  1. Linux内核驱动学习(十)Input子系统详解

    文章目录 前言 框架 如何实现`input device` 设备驱动? 头文件 注册input_dev设备 上报按键值 dev->open()和dev->close() 其他事件类型,处理 ...

  2. MATLAB1127(传递函数)

    sys=tf(400,[1,50,0]) sys = 400 ---------- s^2 + 50 s 其中,tf()函数的用法.   传递函数 dsys=c2d(sys,ts,'z') dsys ...

  3. linux下安装gmp遇到 configure:error:no usable m4 in$path or /user/5bin解决方案

    安装过程中遇到如下报错: 上面的报错是因为你没有安装m4,安装m4就可以了:以下两种命令人选其一: #yum install m4 或 #apt-get install m4 ps:如果遇到权限问题就 ...

  4. 枚举:Enum-Int-String之间的转换与扩展

    示例枚举: public enum Color { [Description("红色")] Red, [Description("绿色")] Green = 7 ...

  5. 网鼎杯2020青龙组writeup-web

    本文首发于Leon的Blog,如需转载请注明原创地址并联系作者 AreUSerialz 开题即送源码: <?php include("flag.php"); highligh ...

  6. windows假死原因调查

    0. 现象 windows假死了,键盘功能正常,就是画面卡住不动了. 1. 看log linux下面很容易通过命令dmesg和/var/log/message来看日志. 但是windows就懵逼了,不 ...

  7. redis主从同步及手动处理故障

    redis主从同步 redis主库机器故障,手动切换主从库

  8. DFS序--一般都要转化为顶点到每个点

    There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each node has a value ai. I ...

  9. 51Nod - 1255

    也是第十一届校赛的C题,不过他把1e5改成了1e7. 一开始就想到用贪心做.思路是这样的:开一个字符数组ans保存答案.然后从头到尾遍历题目给出的字符串S,如果ans数组中还没有这个字母,那么就把字母 ...

  10. CF915D Almost Acyclic Graph

    题目链接:http://codeforces.com/contest/915/problem/D 题目大意: 给出一个\(n\)个结点\(m\)条边的有向图(无自环.无重边,2 ≤ n ≤ 500, ...