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

 更新时间:2022年03月17日 09:39:58   作者:涛姐涛哥  
这篇文章主要介绍了MySQL如何快速创建800w条测试数据表,下面文章围绕MySQL创建测试数据表的相关资料展开详细内容,具有一的的参考价值,需要的小伙伴可以参考一下

一、数据插入思路

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

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创建测试数据表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于mysql合并表的详细介绍

    关于mysql合并表的详细介绍

    本篇文章是对mysql中的合并表进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL EXPLAIN执行计划解析

    MySQL EXPLAIN执行计划解析

    本文主要介绍了MySQL EXPLAIN执行计划解析,通过MySQL EXPLAIN执行计划的各个字段的含义以及使用方式。感兴趣的小伙伴可以参考一下
    2022-08-08
  • Mysql主从复制(master-slave)实际操作案例

    Mysql主从复制(master-slave)实际操作案例

    这篇文章主要介绍了Mysql主从复制(master-slave)实际操作案例,同时介绍了Mysql grant 用户授权的相关内容,需要的朋友可以参考下
    2014-06-06
  • 详解数据库语言中的null值

    详解数据库语言中的null值

    这篇文章主要详解了数据库语言中的null值,针对MySQL上的实例进行讲解,需要的朋友可以参考下
    2015-04-04
  • MySQL语句加锁的实现分析

    MySQL语句加锁的实现分析

    MySQL的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。今天我们来简单谈谈这个问题
    2017-10-10
  • MySQL高级篇之索引的数据结构详解

    MySQL高级篇之索引的数据结构详解

    在MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,下面这篇文章主要给大家介绍了关于MySQL高级篇之索引数据结构的相关资料,需要的朋友可以参考下
    2022-05-05
  • mysql临时表插入数据方式

    mysql临时表插入数据方式

    这篇文章主要介绍了mysql临时表插入数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 解决Windows10下mysql5.5数据库命令行中文乱码问题

    解决Windows10下mysql5.5数据库命令行中文乱码问题

    重置系统后,很久之前安装的MySQL数据库出现了控制台查询中文乱码问题,时间太久早已经不记得怎么设置了。下面通过本文给大家分享Windows10下解决MySQL5.5数据库命令行中文乱码问题,一起看看吧
    2017-07-07
  • MySQL系列教程小白数据库基础

    MySQL系列教程小白数据库基础

    这篇文章主要为大家介绍了MySQL系列中的数据库基础,非常适合数据库小白的入门基础篇,详细的讲解了数据库的基本概念以及基础命令及操作示例,有需要的朋友可以借鉴参考下
    2021-10-10
  • MySQL中Bit数据类型的使用方式

    MySQL中Bit数据类型的使用方式

    这篇文章主要介绍了MySQL中Bit数据类型的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论