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

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

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

1、创建内存表

2、创建普通表

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

3、创建存储函数

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

4、创建存储过程

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

5、调用存储过程

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

6、导入数据

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

7、内存不足

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

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

MySQL默认16M:

修改默认内存配置:

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

8、查看结果

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

9、插入800W条数据

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

查看结果:

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

二、MySQL深度分页

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

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

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

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

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

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

1、测试深度分页

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

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

Original: https://www.cnblogs.com/taojietaoge/p/15726834.html
Author: 涛姐涛哥
Title: MySQL快速创建800w条测试数据表&深度分页

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611920/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • IntelliJ IDEA 断开svn连接

    1 设置菜单 2 进入pluglns 菜单,点击 browse repositonries….. 3 搜索 svn disconnect,然后安装插件 4 安装插件后,…

    数据库 2023年6月6日
    0168
  • 15. 三数之和

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案…

    数据库 2023年6月16日
    076
  • Spring常见问题

    Spring常见问题 问渠那得清如许?为有源头活水来。 Spring 是个 java 企业级应用的开源开发框架。Spring 主要用来开发 Java 应用,但是有些扩展是针对构建 …

    数据库 2023年6月14日
    085
  • Rocksdb Compaction原理

    compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction;磁盘上的sst文件从低层向高层转储的过程称…

    数据库 2023年6月9日
    0101
  • MySQL学习笔记

    MySQL学习笔记 解决MYSQL中文乱码问题 一、乱码的原因: 1、 client客户端的编码不是utf8 2、server端的编码不是utf8 3、database数据库的编码…

    数据库 2023年5月24日
    0125
  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root’@’localhost’

    发现网上很多帖子都是互相抄袭的,关键是不能解决执行后的问题,在这里分享我的解决方案。 [En] Found a lot of posts on the Internet are c…

    数据库 2023年5月24日
    0102
  • 双色球系统开发

    Java对彩票双色球系统开发的简单实现 双色球系统 案例: 中奖条件及奖金表 代码及解释 main方法代码: public static void main(String[] ar…

    数据库 2023年6月16日
    0125
  • sed语句用法

    sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要…

    数据库 2023年6月14日
    088
  • Airbnb JavaScript 代码规范(转载)

    一种写JavaScript更合理的代码风格。 其他代码风格指南 1.1 原始值: 当你访问一个原始类型的时候,你可以直接使用它的值。 string number boolean n…

    数据库 2023年6月11日
    0128
  • 常用的Linux命令

    获取linux服务器所有java进程及名称 pidof java|xargs pwdx pidof:用于查找指定名称的进程的进程号id号-s 一次只显示一个进程号-c 只显示运行在…

    数据库 2023年6月14日
    087
  • django-ckeditor配置html5video上传视频

    参考信息 为Django ckeditor配置上传视频:https://www.byincd.com/bobjiang/article-01128/ 使用 1. 手动下载插件 ht…

    数据库 2023年6月9日
    0102
  • 一份超长的MySQL学习笔记

    前言 最近系统地学习了一边MySQL数据库的基础知识,巩固了一下以前学习的数据库查询基础,又新学习了关于索引、事务等的新内容,做了一些学习笔记。因为MySQL的学习,实操性比较强,…

    数据库 2023年5月24日
    095
  • hosts文件作用

    1、加快域名解析对于要经常访问的网站,我们可以通过在Hosts中配置域名和IP的映射关系,提高域名解析速度。由于有了映射关系,当我们输入域名计算机就能很快解析出IP,而不用请求网络…

    数据库 2023年6月11日
    071
  • 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁。具体来说,InnoDB 采用的是…

    数据库 2023年6月6日
    0100
  • Map–部分方法

    1.Map.values()方法:获取Map集合中的所有键值对象 获取 Map 集合中的所有键值对象,这些键值对象将存放在另一个集合对象中 2.getOrDefault() 方法 …

    数据库 2023年6月16日
    093
  • 多线程

    public class 多线程 { static boolean flag = true; static class t1 implements Runnable{ @Overr…

    数据库 2023年6月16日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球