我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、数据插入思路

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

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:

 修改默认内存配置:

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

9、插入800W条数据

测试插入800W条数据,call 调用存储过程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语句的查询时间与起始记录的位置成正比。

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL快速创建800w条测试数据表&深度分页

MySQL快速创建800w条测试数据表&深度分页  汴水流,泗水流,流到瓜州古渡头。  吴山点点愁。    思悠悠,恨悠悠,恨到归时方始休。      月明人倚楼。 一、数据插入思路如果一条一条插入普通表的话,效率太低下,但内存表插入速度是很快的,可以先建立一
MySQL快速创建800w条测试数据表&深度分页
2021-11-01

mysql 快速生成100w条测试数据

本篇文章是关于MySQL生成百万条数据的全部过程,每一步都有具体的sql,并且每一步都有具体的注释,详细步骤如下:1、创建数据库C
2023-05-15

mysql如何创建数据库创建表

答案:要使用 mysql 创建数据库和表,请按照以下两步操作:步骤 1:使用 create database 语句创建数据库。步骤 2:使用 create table 语句创建表,指定要包含的列和数据类型。如何使用 MySQL 创建数据库和
mysql如何创建数据库创建表
2024-06-14

如何创建mysql数据表

要创建MySQL数据表,可以使用CREATE TABLE语句。以下是一个示例:CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...
如何创建mysql数据表
2024-05-23

mysql数据库如何创建表

要在MySQL数据库中创建表,可以使用CREATE TABLE语句。以下是一个示例:CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT
mysql数据库如何创建表
2024-04-09

mysql如何创建数据表命令

在 mysql 中,可以使用 create table 语句创建数据表,其中指定表名、列名称、数据类型和约束。具体步骤包括:1. 连接到 mysql 数据库;2. 使用 create table 语句创建数据表。MySQL 创建数据表命令
mysql如何创建数据表命令
2024-04-14

mysql创建表后如何输入数据

mysql 表中插入数据的方法有:1. insert 语句;2. load data infile 语句批量加载 csv 文件;3. 使用客户端工具直接插入。MySQL 创建表后如何输入数据创建表后,可以通过以下方法向 MySQL 表中插
mysql创建表后如何输入数据
2024-04-22

技术分享 | 如何使用 dbdeployer 快速搭建 MySQL 测试环境

作者:余振兴一、工具介绍dbdeployer 是一款十分强大的数据库测试环境部署工具,可实现一键部署不同架构、不同版本的数据库环境。如:MySQL 主从复制、GTID 模式复制、MySQL 组复制(单主模式、多主模式等)完整的数据库类型支持及版本,可在安装完
2022-01-26

编程热搜

目录