加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL分区表的正确使用办法

发布时间:2022-03-20 16:25:24 所属栏目:MySql教程 来源:互联网
导读:副标题#e# MySQL分区表概述 我们经常遇到一张表里面保存了上亿甚至过十亿的记录,这些表里面保存了大量的历史记录。 对于这些历史数据的清理是一个非常头疼事情,由于所有的数据都一个普通的表里。所以只能是启用一个或多个带where条件的delete语句去删除(
副标题[/!--empirenews.page--]        MySQL分区表概述
       我们经常遇到一张表里面保存了上亿甚至过十亿的记录,这些表里面保存了大量的历史记录。 对于这些历史数据的清理是一个非常头疼事情,由于所有的数据都一个普通的表里。所以只能是启用一个或多个带where条件的delete语句去删除(一般where条件是时间)。 这对数据库的造成了很大压力。即使我们把这些删除了,但底层的数据文件并没有变小。面对这类问题,最有效的方法就是在使用分区表。最常见的分区方法就是按照时间进行分区。
 
       分区一个最大的优点就是可以非常高效的进行历史数据的清理。
 
1. 确认MySQL服务器是否支持分区表
 
命令:
 
show plugins;
 
2. MySQL分区表的特点
 
在逻辑上为一个表,在物理上存储在多个文件中
 
HASH分区(HASH)
 
HASH分区的特点
 
根据MOD(分区键,分区数)的值把数据行存储到表的不同分区中
数据可以平均的分布在各个分区中
HASH分区的键值必须是一个INT类型的值,或是通过函数可以转为INT类型
如何建立HASH分区表
 
以INT类型字段 customer_id为分区键
 
CREATE TABLE `customer_login_log` (
 `customer_id` int(10) unsigned NOT NULL COMMENT '登录用户ID',
 `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用户登录时间',
 `login_ip` int(10) unsigned NOT NULL COMMENT '登录IP',
 `login_type` tinyint(4) NOT NULL COMMENT '登录类型:0未成功 1成功'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户登录日志表'
 
PARTITION BY HASH(UNIX_TIMESTAMP(login_time)) PARTITIONS 4;
customer_login_log 表如果不分区,在物理磁盘上文件为
 
customer_login_log.frm # 存储表原数据信息
customer_login_log.ibd # Innodb数据文件
如果按上面的建HASH分区表,则有五个文件
 
customer_login_log.frm
customer_login_log#P#p0.ibd
customer_login_log#P#p1.ibd
customer_login_log#P#p2.ibd
customer_login_log#P#p3.ibd

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读