【发布时间】:2022-12-18 14:21:19
【问题描述】:
我知道有很多相关问题和很多答案,但我有一个更微妙的问题。我一直在阅读有关大量记录的不同插入技术,但是查询插入的大小有限制吗?可以将相同的技术用于 REPLACE 和 INSERT ...ON DUPLICATE KEY UPDATE ... 吗?有没有更快的方法?
桌子:
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| a | int(11) | NO | PRI | NULL | auto_increment |
| b | int(11) | YES | | NULL | |
| c | int(11) | YES | | NULL | |
#1
1) "INSERT INTO TABLE COLUMNS (a,b,c) values (1,2,3);"
2) "INSERT INTO TABLE COLUMNS (a,b,c) values (5,6,7);"
3) "INSERT INTO TABLE COLUMNS (a,b,c) values (8,9,10);"
...
10,000) "INSERT INTO TABLE COLUMNS (a,b,c) values (30001,30002,30003);"
或者
#2 - 应该更快,但有限制吗?
"INSERT INTO TABLE COLUMNS (a,b,c) values (1,2,3),(4,5,6),(8,9,10)....(30001,30002,30003)" ;
从脚本的角度 (PHP) 来看,使用 #2,是循环遍历 100 个条目(1000 次)并将其排队更好……还是 1000 个条目(100 次),或者一次全部 10,000 个?这可以用 100,000 个条目完成吗?
同样可以与REPLACE一起使用吗:
"REPLACE INTO TABLE (a, b, c) VALUES(1,2,3),(4,5,6)(7,8,9),...(30001,30002,30003);"
它也可以与INSERT ON DUPLICATE一起使用吗?
INSERT INTO TABLE (a, b, c) VALUES(1,2,3),(4,5,6),(7,8,9),....(30001,30002,30003) ON DUPLICATE KEY UPDATE (b=2,c=3)(b=5,c=6),(b=8,c=9),....(b=30002,c=30003) ?
对于以上所有内容(假设替换/重复有效),是否有更快的方法来实现插入?
【问题讨论】:
-
你真的有哪种情况?全新行的简单插入?或者您可能需要替换/更新现有行?
标签: mysql insert sql-insert upsert