简单的方法来检查行在SQL和添加,如果没有吗?(超过10万行)


Easy way to check rows in SQL and add if not there? (over 100k rows)

我有一个脚本,如果不存在,它将向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个条目。但是这会添加同一行的重复条目。

请给我一些建议,我该怎么做。这些行几乎每天都需要更新。

您要找的是ON DUPLICATE KEY UPDATE。在link上添加索引,然后:

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

话虽如此,您不应该使用ext/mysql,因为它已被弃用。相反,请查看PDOmysqli。为了防止SQL注入,最好使用参数化查询。

可能

INSERT INTO ... ON DUPLICATE KEY UPDATE

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

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

在实践中,您可以通过在linkdb(link)上创建索引来加快这些查询。