MySQL如何快速创建800w条测试数据表


Posted in MySQL onMarch 17, 2022

一、数据插入思路

如果一条一条插入普通表的话,效率太低下,但内存表插入速度是很快的,可以先建立一张内存表,插入数据后,在导入到普通表中。

1、创建内存表

 View Code

2、创建普通表

普通表参数设置和内存表相同,否则从内存表往普通标导入数据会报错。

 View Code

3、创建存储函数

产生伪随机码user_id 要用到存储函数。

 View Code

4、创建存储过程

存储过程是保存起来的可以接受和返回用户提供的参数的Transact-SQL 语句的集合,可以创建一个过程供永久使用。

 View Code

 5、调用存储过程

call 就是调用存储过程或者函数,这里调用存储过程1000000次

CALL add_vote_memory(1000000)

6、导入数据

将内存表中的数据导入普通表。

INSERT into vote_record SELECT * from vote_record_memory

7、内存不足

如果报错内存满了,报错信息如下:

 CALL add_vote_memory(1000000)
> 1114 - The table 'vote_record_memory' is full
 > 时间: 74.61s

则可以使用命令查看内存表和临时表允许写入的最大值:

show variables like '%%table_size%'

MySQL默认16M:

MySQL如何快速创建800w条测试数据表

 修改默认内存配置:

set session tmp_table_size=1024*1024*1024; 
set session max_heap_table_size=1024*1024*1024; 

配置修改后,再执行上述调用存储过程和数据导入步骤。

8、查看结果

查看记录,是否有插入100W条数据。

select count(*) AS total from vote_record

MySQL如何快速创建800w条测试数据表

9、插入800W条数据

测试插入800W条数据,call 调用存储过程800W次。

MySQL如何快速创建800w条测试数据表

 查看结果:

MySQL如何快速创建800w条测试数据表

 800W条测试数据插入OK,想插入多少条测试数据就调用n次存储过程,CALL add_vote_memory(n)。

二、MySQL深度分页

所谓的深度分页问题,涉及到mysql分页的原理。通常情况下,mysql的分页是这样写的:

select id, user_id, vote_id, group_id from vote_record limit 200, 10

SQL意思就是从vote_reccord 表里查200到210这10条数据即【201,210】,mysql会把前210条数据都查出来,抛弃前200条,返回10条。当分页所以深度不大的时候当然没问题,随着分页的深入,sql可能会变成这样:

select id, user_id, vote_id, group_id from vote_record limit 7999900, 10

这个时候,mysql会查出来7999920条数据,抛弃前7999900条,如此大的数据量,速度一定快不起来。

那如何解决呢?一般情况下,最简单的方式是增加一个条件,利用表的覆盖索引来加速分页查询:

select id, user_id, vote_id, group_id from vote_record where id > 7999900 limit 10

我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。上述vote_record 表的id字段是主键,自然就包含了默认的主键索引,这样,mysql会走主键索引,直接连接到7999900处,然后查出来10条数据。但是这个方式需要接口的调用方配合改造,把上次查询出来的最大id以参数的方式传给接口提供方,会有一定沟通成本。

1、测试深度分页

优化前,查询耗时2.362s,随着数据的增大耗时会更多,limit语句的查询时间与起始记录的位置成正比。

MySQL如何快速创建800w条测试数据表

 优化后,耗时0.012s,性能提升了196.8倍。

MySQL如何快速创建800w条测试数据表

到此这篇关于MySQL如何快速创建800w条测试数据表的文章就介绍到这了,更多相关MySQL创建测试数据表内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
Mysql中常用的join连接方式
May 11 MySQL
MySQL 计算连续登录天数
May 11 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
MySQL 分区表中分区键为什么必须是主键的一部分
MySQL优化及索引解析
一条 SQL 语句执行过程
Mysql事务索引知识汇总
Mar 17 #MySQL
MySQL慢查询优化解决问题
Mar 17 #MySQL
MySQL日期时间函数知识汇总
You might like
php框架Phpbean说明
2008/01/10 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
python3 mmh3安装及使用方法
2019/10/09 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
企业形象策划方案
2014/05/29 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
放飞理想主题班会
2015/08/14 职场文书
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫