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 Router的安装部署
Apr 24 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
MySQL 分区表中分区键为什么必须是主键的一部分
MySQL优化及索引解析
一条 SQL 语句执行过程
Mysql事务索引知识汇总
Mar 17 #MySQL
MySQL慢查询优化解决问题
Mar 17 #MySQL
MySQL日期时间函数知识汇总
You might like
php中长文章分页显示实现代码
2012/09/29 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
Dom与浏览器兼容性说明
2010/10/25 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
基于python代码批量处理图片resize
2020/06/04 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
外科实习自我鉴定
2013/10/06 职场文书
关于礼仪的演讲稿
2014/01/04 职场文书
《问银河》教学反思
2014/02/19 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
人事任命通知
2015/04/20 职场文书
运动会观后感
2015/06/09 职场文书
话题作文之自信作文
2019/11/15 职场文书
Python基础 括号()[]{}的详解
2021/11/07 Python