2014-06-24 277 views
2

我想插入0到10000000(1000万)的主键到我的表中。MySQL php插入需要很长时间

我的表如下:

p_key-->  (INT[10]) AUTO_INCREMENT PRIMARY KEY UNIQUE 
hash_value--> (SMALLINT) 
req_count--> (SMALLINT) 

只增加100个记录正在11秒 500次的记录是提前30秒的超时已勾(WAMP的服务器本地主机的PHP MySQL的)

for ($i=0;$i<100;$i++){ 
    $query='INSERT INTO hash_table (hash_value, req_count) VALUES (0,0)'; 
    $result=$con->query($query); 
    if(!$result){ 
     echo ("Error message:".$con->error." \n"); 
     exit(); 
    } 
    } 

我在做一些非常错误的事情。

回答

4

您应该在一个SQL查询中插入多于一条记录。

例如:

$values=''; 

for ($i=0;$i<100;$i++){ 
    $values.='(0,0),'; 
} 

$values=substr($values,0,-1); 

$query='INSERT INTO hash_table (hash_value, req_count) VALUES '.$values; 
$result=$con->query($query); 
if(!$result){ 
    echo ("Error message:".$con->error." \n"); 
    exit(); 
} 
+0

时间从11秒/ 100个记录下降到0.1秒/ 1000个记录。谢啦!!! – user1476394

+0

不客气! – Pvb

1

另一种选择,在一个单一的SQL语句做: -

INSERT INTO hash_table (hash_value, req_count) 
SELECT 0, 0 
FROM 
(SELECT 0 i 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, 
(SELECT 0 i 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 i 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 i 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)thousands, 
(SELECT 0 i 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)tensthousands, 
(SELECT 0 i 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)hundredthousands, 
(SELECT 0 i 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)millions, 
(SELECT 0 i UNION SELECT 1)tensmillions 
WHERE (units.i + 
     tens.i * 10 + 
     hundreds.i * 100 + 
     thousands.i * 1000 + 
     tensthousands.i * 10000 + 
     hundredthousands.i * 100000 + 
     millions.i * 1000000 + 
     tensmillions.i * 10000000) BETWEEN 0 AND 10000000 
+0

这太神奇了! – Pvb