我使用PHP和MySQL在数据库中插入唯一记录。我必须插入1百万条唯一记录。
以下是我目前正在做的事情:
1)表1保存记录。 Table1只有1列已被定义为主列。最初Table1为空。
2)在PHP中生成随机数字串(RNS)(大约长度为18),例如834875609567689789
3)在表1中检查RNS。
4)如果表1中不存在,则将其插入表1和表1中。表2(对于表2,一些随机字符串,例如XYZ附加到RNS,如834875609567689789XYZ并插入表2)。
5)Table2只有1个已被定义为主要的列。
6)我在PHP中运行100 RNS的循环(在每个步骤3,4中比较1个RNS)以执行上述步骤。 100的每个循环需要20-25秒。
如何更快地完成这项工作?
答案 0 :(得分:0)
您可以通过一次插入多行而不是为每个行运行新查询来加快速度。您可能必须调整PHP处理数据的方式,但如果您可以运行像这样的单个查询而不是一堆查询,那么它会更快。
insert into table (col1, col2, col3) VALUES
(val1, val2, val3),
(val1, val2, val3),
(val1, val2, val3),
(val1, val2, val3)
答案 1 :(得分:0)
首先创建一个包含新RNS值的表 - rns_list
。批量插入1000.然后执行步骤3& 4集体:
一次1000行,在3个SQL中:
# Get rid of dups (very rare if you have a good random number generator)
DELETE FROM rns_list
FROM rns_list
JOIN table1 ON rns_list.rns = table1.rns;
# You will need an index starting with rns on table1.
# Now you have perhaps slightly less than 1000,
# so tally the count somewhere (assuming you need exactly 1 million)
# Now do the two inserts:
INSERT INTO table1 SELECT * FROM rns_list;
INSERT INTO table2 SELECT CONCAT(rns, 'XYZ') FROM rns_list;
重复直到你完成了一百万。
批处理操作(例如每个操作)通常比逐行快10倍。