如何才能使数百个类似的MySQL查询更有效?

时间:2011-11-07 22:05:11

标签: php mysql insert

我有一系列有关我在PHP脚本网页上找到的链接的信息。

每个链接都需要插入到MySQL myisam表中。

现在,我遍历数组并为每个链接运行插入查询。

是否有更合适的方法可以让我更有效地使用MySQL?

3 个答案:

答案 0 :(得分:7)

您可以使用单个语句插入多个记录:

<?php

//  Our MySQL query

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );

?>

来源:http://www.desilva.biz/mysql/insert.html

答案 1 :(得分:2)

您可以使用以下语法在单个语句中插入多个值:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

请参阅Section 12.2.5 of the MySQL manual

如果MySQL服务器与PHP服务器位于不同的主机上,这是特别可取的:在上面的示例中,您只需要一个网络往返而不是三个。

如果网络延迟不是问题(如果MySQL服务器在与PHP相同的服务器上运行),请使用这样的预准备语句:

$dbh = new PDO("mysql:host=127.0.0.1;port=3306;dbname=test", "root", "");

$sth = $dbh->prepare("INSERT INTO links(title, href) VALUES(:title, :href);");

while ($link = getNextLink()) {
    $sth->execute( array( "title" => $link->title, "href" => $link->href ) );
}

重复执行时,预处理语句会稍微快一些,因为MySQL服务器必须解析SQL并只运行一次查询计划器/优化器。

如果表有索引,您可以在插入之前禁用它们,并在插入后再次启用它们,这样可以更快地插入行,因为索引不必在每次插入后更新(仅适用于MyISAM,请参阅{{3 }}):

ALTER TABLE links DISABLE KEYS
-- insert rows
ALTER TABLE links ENABLE KEYS

答案 2 :(得分:0)

一段时间或每一个循环足够我想到这一点,因为信息将变得很大,我想象动态。

您可以使用一个查询,但如果您有数百或数千条信息,或者您要使用新数据不断更新数据库,那么带有for或while循环的数组最适合这样做。如果它只是一次性只有几条信息,那么就自己写出QUERY如下

mysql_query(“INSERT INTO table(column1,column2)   VALUES   ( 'VALUE', 'VALUE'),( 'VALUE', 'VALUE')“);