如何在mysql中大规模注入简单的虚拟数据-mysql教程

首页 2024-07-10 15:02:19

介绍

你有没有发现你需要大量的虚拟数据来测试,但你不想花几个小时来编写脚本或手动插入记录?或者你可能如何使用它 MySQL 8.0 对简化数据库任务中的新功能感到好奇?好吧,你要好好享受!在本文中,我们将探索如何使用通用表达式 (CTE) 很容易产生大量的虚拟数据,并将其插入其中 MySQL 数据库中。

想象一下,负载测试或性能基准测试需要在表中填充100万个哈希值。听起来像一场噩梦,对吧?不再!跟着 MySQL 8.0 中 CTE 你可以在几秒钟内实现这个目标。让我们深入了解它的工作原理以及如何使用这个强大的功能来简化您的数据生成需求。

TL; DR

公共表达式(CTE)是MySQL 添加到8.0中的新功能可以很容易地输入大量简单的虚拟数据。例如,如果你想 100 将一万个虚拟数据输入到一个名为存储哈希值的存储中 hashes 在表中,您可以通过以下步骤实现:

表定义

首先,创建表:

创建表哈希(
  id INT 主键自动增加,
  哈希 CHAR(64)
);
查询执行

为了使递归深度更高,设置会话变量:

设置会话cte_max_recursion_深度= 1000000;

然后插入100万行执行CTE:

插入哈希值(hash)
带有递归 cte (n) AS
(
  选择1
  联合所有
  从 cte 中选择 n   1,其中 n 



<p>该方法利用递归公共表达式生成虚拟数据。</p>

<h2>
  
  
  了解 CTE
</h2>

<p>公共表达式(CTE)它是一个临时的命名结果集,可以在单个句子中多次引用。 CTE 特别有用于简化复杂的查询,提高可读性。</p>

<h3>
  
  
  语法细目
</h3>

<h4>
  
  
  设置递归深度
</h4>



<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">设置会话cte_max_recursion_深度= 1000000;

cte_max_recursion_depth系统变量设置递归上限。默认情况下是1000,需要调整才能递归更多。在这里,我们将其设置为 100 万。

CTE 查询
插入哈希值(hash)
带有递归 cte (n) AS
(
  选择1
  联合所有
  从 cte 中选择 n   1,其中 n 



<p>让我们分解这个查询:</p>

  • 使用递归 cte (n):这将启动 CTE 定义。 cte是临时结果集的名称,n是列。

  • SELECT 1:作为起点(初始值),这是CTE的非递归部分。

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • SELECT SHA2(n, 256) FROM cte:查询的最后一部分选择每个查询的最后一部分 n 值的 SHA-256 生成用于插入的虚拟数据的哈希。

怎么运行的

CTE 递归生成从 1 到 1,000,000 数字。对于每个数字,它计算 SHA-256 哈希值并将其插入哈希表中。这种方法非常有效,可以使用 MySQL 递归功能无缝处理大数据量。

处理速度 验证环境

我用它来了解这个功能的影响 Gitpod Enterprise 工作区域,利用强大而短暂的环境,避免设置和安装的麻烦。以下是设置的概述:

  • 机器:Gitpod Enterprise XXLarge 工作区
  • 操作系统:Ubuntu 22.04.4 LTS(Jammy Jellyfish)
  • 容器化:Docker 版本 26.0.1
  • MySQL 版本:官方 MySQL 8.0 Docker 镜像
结果

对于 100 万行,查询执行时间约为 4.46 秒:

<a style="color:#f60; text-decoration:underline;" href="https://www.php.cn/zt/15713.html" target="_blank">mysql</a>&gt; INSERT INTO 哈希值(hash)
    -&gt; 带有递归 cte (n) AS
    -&gt; (
    -&gt; 选择 1
    -&gt; 联合所有
    -&gt; 从 cte 中选择 n   1,其中 n  )
    -&gt; 从 cte 中选择 SHA2(n, 256);
查询正常,1000000 影响行为(4.43 秒)
记录:1000000 重复:0 警告:0
性能指标
行数 执行时间 1,000 0.03秒 10,000 0.07秒 100,000 0.42秒 1,000,000 4.43秒 10,000,000 48.53秒
结论

在 MySQL 8.0 中使用 CTE 改变游戏规则可以快速生成大量虚拟数据。它特别方便负载测试和性能基准测试。只需几行代码即可轻松填写表格,然后返回项目的其他重要部分。

不要犹豫,尝试不同的数据生成策略和递归深度,看看哪一个最适合你。有关安全性和日志分析的更多提示和意见,请访问 Twitter 上关注我@Siddhant_K_code,并且随时了解这种最新而详细的技术内容。快乐编码!

以上是如何在MySQL中大规模注入简单虚拟数据的详细内容,请关注其他相关文章!


p

最新文章

  • 数据无忧,一键备份恢复,安心下载!

  • 如何在mysql中大规模注入简单的虚拟数据-mysql教程

  • 《颠覆日常!身体互换,挑战未知新体验》

  • TL;DR: 在 Google Cloud Console 创建用户后,别忘了 REVOKE 'cloudsqlsuperuser'@'%' FROM 'your-user'@'%';假设您只是想让用户访问特定的模式。

    通过 Google Cloud Console 创建 MySQL 自动添加用户 cloudsqlsuperuser 允许用户访问角色 MySQL 示例中的所有内容:

    显示 'user-from-gcp-console'@'%' 的补助金;
    
     ------------------------------------------------ ------------ 
    

  • 高效启动:一键直达文件系统仪表板(解释:这个标题简洁明了,使用了“高效启动”和“一键直达”等词汇,旨在传达出快速、便捷地打开文件系统仪表板的信息。)

  • 开启3389端口,一键批处理,高效安全!

  • Python。自动创建 MySQL 备份数据库。-mysql教程

  • 相关文章

  • TL;DR: 在 Google Cloud Console 创建用户后,别忘了 REVOKE 'cloudsqlsuperuser'@'%' FROM 'your-user'@'%';假设您只是想让用户访问特定的模式。

    通过 Google Cloud Console 创建 MySQL 自动添加用户 cloudsqlsuperuser 允许用户访问角色 MySQL 示例中的所有内容:

    显示 'user-from-gcp-console'@'%' 的补助金;
    
     ------------------------------------------------ 

  • Python。自动创建 MySQL 备份数据库。-mysql教程

  • HackerRank SQL Preparation: Japanese Cities&# Names(MySQL)-mysql教程

  • HackerRank SQL 准备:气象观测站 ySQL)-mysql教程

  • HackerRank SQL 准备:全选(MySQL)-mysql教程

  • 通过构建悬念库来学习悬念-js教程

  • HackerRank onths 准备套件(JavaScript) - Mini-Max Sum-js教程

  • 为什么 HTMX 远远优于 React 和 NextJs-js教程

  • 前端技术-css教程教程

  • 掌握 CSS 网格布局:开发人员综合指南-css教程

  • 我相信我们正在开发复杂而大规模的开发 React 在应用程序中,每个人都会为代码的可重用性而挣扎。一种方法是(用于(用于) api 调用的自定义挂钩)。让我们开始创建它们。

    第一,我为我糟糕的写作感到抱歉。我的语言不是英语:)

    当然,我们必须在应用程序中多次从服务器获取数据。那么,我们如何才能有效地处理这些需求呢?

    使用获取自定义挂钩

    自定义钩的代码如下

  • 我的项目需要一些使用 React GSAP Flip 帮助-css教程