记一次MySQL表分区操作
最近一次日常迭代中,业务线需要对一张大表进行联合查询,查询性能可想而知,测试过程中服务接口直接响应超时,导致服务不可用,最后临时对该表进行分区操作,暂时缓解性能问题。由于是第一次操作表分区,姑且记录一下整个操作过程。
测试表结构
1  | 
CREATE TABLE `tb_partition_test` (  | 
表应用场景为:存储用户的成绩明细数据,成绩计算有多种不同的维度,每个用户的每个成绩维度只有一个分值。所以整个表按照record_type分组后,每个成绩对应的数据量是一致的,都为用户数量。最后对record_type进行hash分区。
为了不影响生产环境的业务使用,而恰好该表又不会有业务更新操作,故新建一个分区表,将原有表数据导入,采取分块导入的方式,避免产生大量的临时文件。
创建分区表
1  | 
CREATE TABLE `tb_partition_test_part` (  | 
数据导入
1  | 
for i in {1..100};do
 | 
导入完成后修改表名,会有短暂时间的锁表
1  | 
set AUTOCOMMIT = 0;  | 
查询性能比较:
通过explain partitions查看执行计划,对于指定record_type的查询,只会在指定的分区中查找,数据按照record_type均匀分区了,前后执行时间比较
1  | 
+----------+  | 
1  | 
+----------+  | 
显然3.04 sec的性能仍是不可接受的,作为相对低频的业务,这只是临时的处理方案,而且恰好因为目前的需求在每次查询都会附带record_type条件,所以可以很好的利用分区提升性能,但如果出现不按照record_type条件的查询,仍然会出现性能瓶颈,需要后端人员以及来进行优化。
参考
  1. https://dev.mysql.com/doc/refman/5.6/en/partitioning-hash.html
  2. http://www.cnblogs.com/chenmh/p/5623474.html
  3. http://blog.csdn.net/zzy7075/article/details/70054818
  4.http://blog.csdn.net/yongchao940/article/details/55266603
记一次MySQL表分区操作的更多相关文章
- mysql 表分区操作
		
//不支持动态创建分区CREATE TABLE `rpt_exp_event_bucket_creative_d_across` ( `bucket_id` VARCHAR(200) NOT NULL ...
 - MySQL表的四种分区类型
		
MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
 - [转载]github在线更改mysql表结构工具gh-ost
		
GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具! gh-ost是GitHub最近几个月开发出来的,目的是解决一个经常碰到的问题:不断变化的产品需求 ...
 - 记一次mysql数据库被勒索(中)
		
背景在上一篇文章里面已经提过了. 现在面临的问题是nextcloud没有mysql数据库,用不起来了. 因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次. 为了程序员的面子,没有选 ...
 - MySQL表名和数据库关键字相同解决办法
		
今天改他们的代码的时候,遇到了MySQL表名和数据库关键字的问题. 由于表名是关键字,导致增删改查都报错. Hibernate: select leave0_.id as id22_, leave0_ ...
 - MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
		
一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
 - 清除mysql表中数据
		
delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内 ...
 - Python将MySQL表数据写入excel
		
背景:将mysql表查询结果写入excel. 1.使用sqlyog工具将查询结果导出到Excel.xml中,用excel打开发现:因为text字段中有回车换行操作,显示结果行是乱的. 2.用mysql ...
 - mysql表名忽略大小写问题记录
		
问题描述:一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: mysql> show tables; +--- ...
 
随机推荐
- cifar数据集下载
			
https://www.cs.toronto.edu/~kriz/cifar.html Version Size md5sum CIFAR-10 python version 163 MB c58f3 ...
 - RDD(十)——案例实操
			
需求: 数据结构:时间戳,省份,城市,用户,广告,中间字段使用空格分割. 样本如下: 1516609143867 6 7 64 16 1516609143869 9 4 75 18 151660914 ...
 - 高精度处理斐波那契序列(C语言)
			
#include<stdio.h> #include<string.h> //memset,strcpy,strlen函数头文件 int main(void) { ];//用来 ...
 - java类为什么要实现Serializable接口
			
什么是Serializable接口? 一个对象序列化的接口.一个类只有实现了Serializable接口,它的对象才能被序列化. 什么是序列化? 将对象的状态信息转换为可以存储或传输的形式的过程. 在 ...
 - 创建可执行jar包
			
1.编辑manifest.mf文件 Main-Class:空格 你的类名 回车 2.打包 jar cvfm 类名.jar manifest.mf 类名.class 3使用 java -jar 类名.j ...
 - 记忆化dp博弈
			
题:http://poj.org/problem?id=2068 题意: 有两个队伍A,B,每个队伍有N个人,交叉坐.即是A(1,3,5,7.....)B(2,4,6,8....).告诉你每个mi(1 ...
 - Xcode查看iOS崩溃与崩溃日志分析
			
一.造成崩溃的原因 1.代码中存在bug 2.Watchdog 超时机制 3.用户强制退出 4.低内存终止 5.其他违法系统规则的操作,大部分是内存问题 二.崩溃的类型 1.信号错误类 (1)EXC_ ...
 - android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码
			
Android精选源码 android漂亮的加载效果 android各种 选择器 汇总源码 Android仿bilibili搜索框效果 Android记事本app.分类,涂鸦.添加图片或者其他附件 仿 ...
 - 2010提高组-C]关押罪犯(扩展域并查集
			
题:https://www.cometoj.com/problem/0073 #include<bits/stdc++.h> using namespace std; ; struct n ...
 - uname|mv|tar -xzvf|
			
$ ls CAFE-4.2.1.tar.gz mcl-latest.tar.gz mysql-5.4.3-beta-linux-i686-glibc23.tar.gz.1 orthomclSoftwa ...