在表中创建899行的最快方法是什么,只使用数字。该列不是自动增量。
目前我创建了一个这样的查询:
$a1=range(100,999);
$a1=implode('),(',$a1);
$a1='INSERT INTO groups (val) VALUES('.$a1.')';
它提供了一个像这样的巨大查询:
INSERT INTO groups (val) VALUES(100),(101),(102),(103),(104),(105),(106),(107),(108),
(109),(110),(111),(112),(113),(114),(115),(116),(117),(118),(119),(120),(121),(122),
(123),(124),(125), etc etc etc....
我想知道是否有更快更好的方法来做到这一点?
答案 0 :(得分:1)
我认为你没有更快的方法。请查看 MySQL documentation
插入行所需的时间由以下确定 因素,数字表示大致比例:
连接:(3)
向服务器发送查询:(2)
解析查询:(2)
插入行:(1×行的大小)
插入索引:(1×索引数)
结束:(1)
这不考虑打开的初始开销 表,每个并发运行的查询都会执行一次。
表的大小减慢了log N插入索引的速度, 假设B树索引。
您可以使用以下方法加速插入:
如果您同时从同一客户端插入多行, 使用带有多个VALUES列表的INSERT语句来插入多个 一次排。这要快得多(在某些情况下要快很多倍) case)比使用单独的单行INSERT语句。如果你是 将数据添加到非空表,您可以调整 bulk_insert_buffer_size变量使数据插入更快。 请参见第5.1.4节“服务器系统变量”。
通过一个查询,您可以保存Connecting
,Sending query to server
,Closing
,以及MySQL优化您的查询。
另外,如果您只插入大约1000行且数据如此之少,那么插入速度非常快,因此在这种情况下我不会担心性能。
答案 1 :(得分:0)
对于一系列数字,如果需要,可以使用较小的查询: -
INSERT INTO groups (val)
SELECT Hundreds.a * 100 + Tens.a * 10 + Units.a AS aNumber
FROM
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Hundreds,
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens,
(SELECT 0 AS a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units
HAVING aNumber BETWEEN 100 AND 999
不确定这会为你节省多少。