执行多个插入查询

3

我即将插入365条记录,我想知道哪种方法更好。

1) 逐个插入1000个插入查询语句(每个记录一个)

2) 使用类似于

insert into table name ('field1', 'field2') values (value,value),(value,value),(value,value),(value,value)

我想知道第二个执行是否更快,是否有用。


1
测量。测量。测量。 - Mitch Wheat
这实际上是一个很好的问题。我的第一反应是编写一个脚本生成365个单独的“插入”语句,但实际上只生成一个语句可能会更快。我无法回答这个问题,但你能否测试一下并让我们知道结果呢? - gr3co
1
一个好问题?你肯定有更重要的事情要做吧? - Mitch Wheat
在这种情况下,度量是不必要的,因为相应的MySQL手册页面中有明确的答案。 - Alma Do
谢谢朋友们!我一直在重构现有的代码,因为这个问题一直出现“数据库连接失败”。我在这里提出的问题是重构的基础,这就是为什么我无法衡量的原因。 - raju
2个回答

4
根据MySQL 插入计划,我们在花费时间方面遇到了以下问题:
- Connecting
- Sending query to server
- Parsing query 
- Inserting row (1 × size of row)
- Inserting indexes: (1 × number of indexes)
- Closing

由于这个原因,多次插入操作更快,因为它只会产生一次连接、发送查询到服务器、解析查询和关闭的开销。这也在手册中有所体现:
如果您需要同时从同一客户端插入多行,请使用带有多个VALUES列表的INSERT语句来一次性插入多行。这比使用单独的单行INSERT语句要快得多(在某些情况下快几倍)。如果您要将数据添加到非空表中,则可以调整bulk_insert_buffer_size变量以使数据插入更快。请参见第5.1.4节,“服务器系统变量”

0

创建批次并插入数据会更好,因为数据库不会针对每个INSERT语句(如果每条记录都单独插入)进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接