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)

大家都在看

  • 解决:MyBatis-plus多数据源方法上方添加事务,数据源切换失败

    说明:MyBatis-plus配置了多数据源,添加事务后,数据源切换失败了… 一、场景描述 项目当中使用的多数据源,Impl中有个方法:MethodA。 @Servic…

    数据库 2023年6月6日
    095
  • MySQL常见问题

    MySQL 连接字符串 MySQL 5.7 jdbc.drive=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:330…

    数据库 2023年5月24日
    0104
  • 手把手教你分析MySQL查询性能瓶颈,包教包会

    当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪? 我们一般会使用 Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引? 但执行计划显示内容不…

    数据库 2023年5月24日
    084
  • 必应咋想的

    首页里弄了个阴森的图片,下面有个山洞,里面有白衣女鬼飘过,还有背景音乐。 看右下角的介绍里有名字叫:万圣节之夜在黑暗树篱 Original: https://www.cnblogs…

    数据库 2023年6月9日
    0104
  • 自定义 systemd service

    Red Hat Linux 自 7 版本后 采用systemd 形式取代原先 init ,用户可以参考 系统service 创建自己的service ,以便于日常统一管理,系统se…

    数据库 2023年6月15日
    097
  • 云数据库技术|“重磅升级”后再测 TDSQL-C

    标题 1.摘要 前段时间,测试了国内主要云原生数据库 PolarDB、TDSQL-C、GaussDB 的性能,参考:《再测云原生数据库性能》。在上次测试结果中,由于地域版本差异,腾…

    数据库 2023年6月11日
    087
  • 线程的同步

    线程同步机制同步块:Java中提供了同步机制,可以有效的防止资源冲突。同步机制使用 synchronized关键字 使用该关键字的代码块称为同步块。同步块 语法: synchron…

    数据库 2023年6月16日
    0129
  • 如何使用Java代码修改数组大小呢?

    数组是Java开发中非常重要的一个数据存储容器, 那可以存储多种类型,基础类型,引用类型,但是它有一个缺点,就是一旦创建后,就不可以修改数组的大小, 那么我们如何动态的扩容数组的大…

    数据库 2023年6月11日
    0104
  • MySQL8 Group By 新特性

    MySQL8 Group By 新特性 此生此夜不长好,明月明年何处看。 一、简介 MySQL8 新特性之 Group By 不再隐式排序。MySQL8对于group by 字段不…

    数据库 2023年6月14日
    081
  • SQL学习日记(一) 语法篇

    对象名 关键字 描述 表 table 存储数据的逻辑单元,以行和列存在,行是数据记录,列是(属性)字段 系统表(数据字典) 存放数据库相关信息的表 程序员只可查看,不可修改 约束 …

    数据库 2023年5月24日
    079
  • 解决数据库报错Error 1390: Prepared statement contains too many placeholders的问题

    今天在开发项目时,试着一次性插入大量数据,结果出现了以下报错: 依稀记得以前也遇到过类似的问题,于是打算记录下错误原因及解决过程: 首先,这是由于sql语句中占位符数量限制导致的 …

    数据库 2023年6月14日
    0107
  • 红黑树添加删除

    上一篇写了234树对比红黑树,和红黑树某些情况需要调整的原因,这篇就只写红黑树的添加和删除 红黑树 JAVA技术交流群:737698533 性质 每个节点要么红色要么黑色 根节点是…

    数据库 2023年6月16日
    064
  • MySQL实战45讲之基础篇

    前言 本文主要记录学习 MySQL实战45讲之基&#x7840…

    数据库 2023年5月24日
    0118
  • lamp

    lamp 1. lamp简介 2. web服务器工作流程 2.1 cgi与fastcgi 2.2 httpd与php结合的方式 2.3 web工作流程 3. lamp平台搭建 3….

    数据库 2023年5月24日
    0103
  • Java基础十—JavaIO

    CPU指令与内核态、用户态 在操作系统中,CPU负责执行指令,这些指令有些来自应用程序,有些是来自底层系统。有些指令是非常危险的,如清除内存,网络连接等等,如果错误调用的话有可能导…

    数据库 2023年6月6日
    0122
  • 翻译 | 解读首部 Kubernetes 纪录片

    Honeypot.io 自诩为欧洲最大的技术人才招聘平台,同时提供开发者视频网站,又被称其为 ” 开发者的 Netflix“。2022 年 1 月,该公司与…

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