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

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

如果在普通表格中插入条,效率太低,但内存表的插入速度很快,可以先创建内存表,插入数据,然后再导入到普通表格中。

[En]

If a bar is inserted into the ordinary table, the efficiency is too low, but the insertion speed of the memory table is very fast, you can first create a memory table, insert the data, and then import it into the ordinary table.

1、创建内存表

2、创建普通表

普通表的参数设置与内存表相同,否则将内存表中的数据导入正常标准会报错。

[En]

The parameter setting of the normal table is the same as that of the memory table, otherwise importing data from the memory table to the normal standard will report an error.

3、创建存储函数

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

4、创建存储过程

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

5、调用存储过程

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

6、导入数据

将数据从内存表导入常规表。

[En]

Import the data from the memory table into the regular table.

7、内存不足

如果错误内存已满,则错误消息如下:

[En]

If the error memory is full, the error message is as follows:

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

[En]

You can use the command to view the maximum values allowed to be written to memory tables and temporary tables:

MySQL默认16M:

修改默认内存配置:

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

[En]

After the configuration is modified, perform the above call stored procedure and data import steps.

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条,如此大的数据量,速度一定快不起来。

那么如何解决这个问题呢?通常,最简单的方法是添加一个使用表的覆盖索引来加快分页查询速度的条件:

[En]

Then how to solve the problem? In general, the easiest way is to add a condition that uses the table’s overlay index to speed up the paging query:

我们都知道,如果在利用索引查询(覆盖索引)的语句中只包含该索引列,则该查询是快速的。

[En]

We all know that if only that index column is included in a statement that takes advantage of an index query (overriding the index), then the query is fast.

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。上述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/507924/

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

(0)

大家都在看

  • 掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵

    💡 作者:韩信子@ShowMeAI📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56📘 本文地址:https://www…

    数据库 2023年6月14日
    098
  • 删除MySQL数据用户

    mysql删除用户的方法: 1、使用”drop user 用户名;”命令删除; 2、使用”delete from user where user…

    数据库 2023年6月14日
    081
  • 详解Threejs中的光源对象

    光源的分类 AmbientLight(环境光), PointLight(点光源), SpotLight(聚光源) 和 DirectionalLight(平行光)是基础光源 Hemi…

    数据库 2023年6月11日
    0105
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    065
  • JavaScript Date 时间类型 .toISOString() 时差问题

    JS中使用 toISOString 方法导致差了8个小时的问题 使用 getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。对差的时间进行补…

    数据库 2023年6月11日
    089
  • MySQL实战45讲 9

    09 | 普通索引和唯一索引,应该怎么选择? 每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的…

    数据库 2023年6月16日
    0109
  • MySQL实战45讲 14

    14 | count(*)这么慢,我该怎么办? 在开发系统的时候,你可能经常需要 计算一个表的行数,比如一个交易系统的所有变更记录总数。 随着系统中记录数越来越多,select c…

    数据库 2023年6月16日
    0102
  • IDEA 常用插件

    插件使用参考:Idea插件系列 插件名称 说明 IDE Eval Reset 破解软件 Alibaba Java Coding Guidelines 阿里巴巴开发规范 tabnin…

    数据库 2023年6月6日
    087
  • Pisanix v0.2.0 发布|新增动态读写分离支持

    1.动态读写分离介绍 1.1 介绍 读写分离是业界使用 MySQL 高可用最常用的方案之一,在实际场景中可以提高查询性能,降低服务器负载。本次版本在 v0.1.0 静态规则基础上增…

    数据库 2023年6月16日
    097
  • 浅谈一下“敏捷开发”

    为什么需要敏捷开发 在以前,软件项目的开发都是以年来计算的,这代表什么意思呢 ?需求设计了半年多,方案设计做了半年多,开发了三年多,测试了半年多,修改Bug用了半年多。总计花了很长…

    数据库 2023年6月14日
    088
  • likeshop搭建商城系统,一步到位

    什么是商城系统?商城系统又称在线商城系统,是一个功能完善的在线购物系统,主要为在线销售和在线购物服务。 一般的商城系统运营模式有B2C单商户商城系统,B2B2C多商户商城系统以及S…

    数据库 2023年6月14日
    0147
  • kafka详解(一)–kafka是什么及怎么用

    kafka是什么 在回答这个问题之前,我们需要先了解另一个东西–event streaming。 什么是event streaming 我觉得, event strea…

    数据库 2023年6月6日
    082
  • atomic 原子自增工程案例

    案例 1 : 简单用法 atomic_int id; atomic_fetch_add(&id, 1) atomic_uint id; atomic_fetch_add(&…

    数据库 2023年6月9日
    089
  • 翻译|使用 StatefulSet 运行数据库应用

    本文介绍 Kubernetes 支持数据库等有状态应用的常见解决方案:StatefulSet。 我们在构建机器学习向量管理时面临的一个重要问题是:如何持久化数据,避免数据丢失? […

    数据库 2023年5月24日
    0101
  • 记一次有意思的业务实现 → 单向关注是关注,双向关注则成好友

    开心一刻 有一个问题一直困扰着我:许仙选择了救蛇,但为什么杨果选择了救鹰(而不是救蛇)。 [En] A question has been bothering me: Xu Xia…

    数据库 2023年5月24日
    0109
  • FlyAway–数据库版本管理工具

    相关博文: FlyAway官方文档: https://flywaydb.org/documentation/getstarted/how 关于SpringBoot整合并使用FlyA…

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