MySQL插入查询优化

2024-04-18

将大量行插入表中时,以下两种方法中哪一种会更快。

查询方法一:逐条执行查询。

INSERT INTO tbl_user(id, name, number) VALUES(NULL, 'A', '9999999999');
INSERT INTO tbl_user(id, name, number) VALUES(NULL, 'B', '9999999999');
INSERT INTO tbl_user(id, name, number) VALUES(NULL, 'C', '9999999999');

查询方法2:立即执行查询。

INSERT INTO tbl_user(id, name, number) VALUES(NULL, 'A', '9999999999'),
                                             (NULL, 'B', '9999999999'), 
                                             (NULL, 'C', '9999999999');

由于存在一些争论,我想我应该尝试一个基准测试,但首先

 CREATE TABLE `tbl_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB 

然后,我使用 2 行 python 生成问题中形式的 SQL 查询。

场景一:
许多单个插入,每个查询都完全相同

INSERT INTO tbl_user VALUES(NULL,'A','9999999');
INSERT INTO tbl_user VALUES(NULL,'A','9999999');

1000 行;三次执行的平均(mean)运行时间 45.80 秒
5000 行;单次运行220秒

场景2:
单个查询插入 1000 行,如下所示:

INSERT INTO tbl_user VALUES(NULL,'A','9999999'),
(NULL,'A','9999999'),
(NULL,'A','9999999'),
(NULL,'A','9999999'),

1000 行 3 次执行的平均运行时间 0.17 秒
5000 行 3 次执行的平均运行时间 0.48
10000 行 3 次执行的平均运行时间 1.06

场景3:
与场景 1 类似,但有一个START TRANSACTION and COMMIT包裹在插入语句中

1000 行 3 次执行的平均运行时间 0.16 秒
5000 行 3 次执行的平均运行时间 0.48
10000 行 3 次执行的平均运行时间 0.91

结论:
场景 2,即其他两个答案中提出的内容,确实在很大程度上优于场景 1。有了这些数据,很难在 2 和 3 之间做出选择。需要对更多插入件进行更严格的测试。但如果没有这些信息,我可能会选择三个,原因是解析一个非常大的字符串通常会产生开销,准备一个字符串也是如此!我怀疑如果我们尝试在一条语句中一次插入大约 50,000 条记录,实际上可能会慢很多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL插入查询优化 的相关文章

随机推荐

  • 用于从模式生成 URL 的 Java 库

    我想知道是否有任何免费的 Java 库可以自动执行以下过程 1 提供遵循特定模式的 URL 例如 http www asite com path to something thischange alsothischange andthisc
  • 在 Spring Boot 测试中的纯二进制 websocket 连接期间保留 TestSecurityContextHolder

    我有一个使用二进制 websocket 的 spring boot 1 5 2 RELEASE 应用程序 即没有 Stomp AMQP 纯二进制缓冲区 在我的测试中 我能够来回发送消息 效果非常好 但是 在对应用程序进行 websocket
  • 如何知道网络是否连接(断开)?

    在 Xul 中 我如何知道网络是否已连接 断开 update Using function observe aSubject aTopic aState if aTopic network offline status changed wr
  • 是否可以检索由混淆矩阵识别的误报/误报?

    我正在使用 Scikit learn 并使用混淆矩阵来更深入地了解我的算法的执行情况 X train X test Y train Y test train test split keywords list label list test
  • Pydantic 从列表中设置变量

    有没有办法从列表中设置 pydantic 模型 我尝试过这个 但它对我不起作用 如果 pydantic 无法做到这一点 如果我仍然需要类型验证和转换 约束等 那么最好的方法是什么 顺序在这里很重要 from pydantic import
  • 旋转的 CGRect 内部的点

    如何正确确定一个点是否位于旋转的 CGRect 框架内 框架随 Core Graphics 一起旋转 到目前为止 我已经找到了一种计算点是否在三角形内的算法 但这并不是我所需要的 正在旋转的框架是一个带有一些子视图的常规 UIView 让我
  • jquery从下拉列表中获取标签值

    我知道我可以使用 dropdown val 获取值 有人知道我如何获得标签吗 Cheers var text dropdown find option selected text 这与以下相同 var text dropdown optio
  • 跳过 Maven 测试依赖项

    我正在开发一个使用 Maven 进行构建的项目 我想做的是跳过测试依赖项 基本上在我的 Maven 存储库中不存在工件的情况下运行 Maven 构建 eg
  • 在处理 VotingClassifier 或网格搜索时,Sklearn 中的 GradientBoostingClassifier 是否有类别权重(或替代方法)?

    我正在使用 GradientBoostingClassifier 来处理不平衡的标记数据集 Sklearn 中似乎不存在类权重作为该分类器的参数 我发现我可以在合适时使用sample weight 但在处理VotingClassifier
  • 流星排序集合随机

    我想从 Meteor 集合中获取随机排序的集合 最好 最有效的方法是什么 Mongo 选项存在争议 https stackoverflow com questions 20336361 get random document from a
  • 在代码中使用通用 Int - 在 Core Data iOS 中使用 32 位或 64 位 Int?

    我正在用 swift 编写一个应用程序 通过苹果的核心数据保存其数据 在我的代码中 所有整数都被声明为 Int 因为这样更灵活 并且编译器会根据代码运行的设备调整这些整数 但是 当我想使用核心数据保存这些 Int 时 我必须选择 32 位或
  • 从ACRA 4.5升级到ACRA 4.6后编译错误

    我将我的应用程序使用的 ACRA 库从 4 5 0 到 4 6 0 但我收到 formKey 的编译错误 以前可以与 4 5 一起使用 以下是声明 ReportsCrashes formKey formUri socketTimeout 1
  • 根据另一个数组的数据对 numpy 数组进行排序

    我有两组数组data and result result包含相同的元素data但有一个额外的列并且按未排序的顺序 我想重新安排result数组 使其与中的行顺序相同data 同时在排序时将关联值与该行的其余部分一起放入最后一列 data n
  • 使用 Google Apps 脚本批量导入多个条目

    我知道有现有的代码可以构建可以上传多个文件 批量导入 的表单 如下所示使用 Google App 脚本将多个文件上传到 Google Drive https stackoverflow com questions 31126181 uplo
  • requireJS 与文件上传插件

    在requirejs中 我们可以通过以下方式设置js的名称 requirejs config paths jquery cdnjs cloudflare com ajax libs jquery 2 1 0 jquery min js 并将
  • 捕获 UserControl 中的 KeyDown 事件

    我有一个带有多个子控件的用户控件 我需要用户界面对按键做出反应 因此我决定将处理代码放入 MainControl KeyDown 事件中 但是 当我在应用程序中按下某个键时 该事件不会触发 我通过搜索引擎找到了一个依赖于使用 Windows
  • Ajax jquery 异步返回值

    我怎样才能让这段代码返回值无需冻结浏览器 当然 您可以用新方法重写它 function get char val merk var returnValue null ajax type POST async false url char i
  • js 异步/等待不工作

    我正在尝试了解 async await 以及如何使用它们 我正在遵循一些我见过的例子 我认为 但等待实际上并不是在等待ajax响应 这是代码 async function doAjaxGet ajaxurl const result awa
  • 在ggplot2中水平均匀分布点

    我想绘制计数的垂直箱线图 并将计数显示为点 覆盖在箱线图上 因为它们是离散值 所以会有多个点具有相同的值 为了在 ggplot2 中显示数据 我可以使用 geom jitter 来传播数据并获得稍微好一点的印象 但是抖动会破坏值 垂直分量
  • MySQL插入查询优化

    将大量行插入表中时 以下两种方法中哪一种会更快 查询方法一 逐条执行查询 INSERT INTO tbl user id name number VALUES NULL A 9999999999 INSERT INTO tbl user i