2013-02-02 83 views
1

与性能相关:插入多行SQL

是更好地使1000个查询,插入1000行:

for($i=1;$i<=1000;++$i){ 
     $query = 'insert into table1 (First,Last) values ("Fred","Smith")'; 
     mysql_query($query); 
    } 

还是要使用PHP创建一个查询(在for循环串联值)像这样:

$query = ' insert into table1 (First,Last) values ("Fred","Smith"), 
     ("John","Smith"), 
     ... 
     ("Michael","Smith"), 
     ("Robert","Smith")'; 
    mysql_query($query); 

鉴于可能有很多值,我一次选择插入10个值。我不知道这没关系,在这种情况下最好的做法是什么?

回答

6

第二个比较好。连接到数据库非常昂贵。

另一种说法是,速度更快?让1000次旅行减少1000箱或一次旅行减少1000箱?

+0

但是,如果卡车不够大,无法安装所有这些箱子呢? :)(查询大小限制?) – Cristy

+2

@Cristy然后将其分成包含每个框的最大数量的最小行程数。仍然快于1000次旅行。 –

0

第二是更好的,你有多大的控制权,第一U不要有太多的控制要插入不同的值

3

这个问题,我想,回答不够好​​,在official site

如果您要同时从同一客户端插入多行,则 将使用具有多个VALUES列表的INSERT语句一次插入多个 行。这比使用单独的单行INSERT语句快得多(在某些 的情况下快了很多倍)。

虽然我会建议整个页面,因为它列出了优化多插入(针对不同类型的引擎)的几种策略。然而,在最后它提到...

INSERT仍比LOAD DATA INFILE装载数据,要慢得多只使用概述的战略,即使 。

......这是相当真实的:如果你需要一些巨大的(但静态的)数据集被加载到数据库中,请改用LOAD DATA INFILE语句。

0

其简单,成批处理的成本低于逐个处理。它的全部成本都在头上,这里是性能方面的资源。