0

我有一个脚本,如果它不存在,它会向 SQL 添加大约 100,000 个条目。但通常需要大约 30 个小时才能完全检查每一行,如果不存在则添加。有没有更简单的方法来做到这一点?

我的代码目前使用了一个 for 循环,循环内就是这个。

$query = mysql_query("SELECT EXISTS (SELECT * FROM linkdb WHERE link='$currentlink')");

if (mysql_result($query, 0) == 1){

}else{
  $qry = "INSERT INTO linkdb(link,title) VALUES('$link','$title')";
  $result = @mysql_query($qry);

}

上面的代码需要很长时间,因为它通常要经过数千个条目。如果我不先使用 SELECT EXIST 检查表而只使用 INSERT INTO,则在 1 分钟内会添加 90,000 个条目。但这会增加同一行的重复条目。

请给我一些关于我能做什么的建议。这些行几乎每天都需要更新。

4

3 回答 3

2

你正在寻找ON DUPLICATE KEY UPDATE. 添加一个索引link,然后:

INSERT INTO linkdb(link,title) VALUES('$link','$title') ON DUPLICATE KEY UPDATE link=link;

话虽如此,您不应该使用ext/mysql它,因为它已被弃用。而是查看PDOor mysqli。最好为此使用参数化查询来防止 SQL 注入。

于 2013-05-02T19:48:28.577 回答
0

也许

INSERT INTO ... ON DUPLICATE KEY UPDATE

可以解决你的问题。

于 2013-05-02T19:48:20.880 回答
0

如果您不想在存在重复时更新值,则可以将两个查询合并为一个:

INSERT INTO linkdb(link,title)
    select '$link','$title'
    where not exists (SELECT * FROM linkdb WHERE link='$currentlink'))

在实践中,您可以通过在linkdb(link).

于 2013-05-02T19:51:09.483 回答