我有一个脚本,如果它不存在,会向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个条目。但是这会添加同一行的重复条目。
请给我一些关于我能做些什么的建议。这些行几乎每天都需要更新。
答案 0 :(得分:2)
您正在寻找ON DUPLICATE KEY UPDATE
。在link
上添加索引,然后:
INSERT INTO linkdb(link,title) VALUES('$link','$title') ON DUPLICATE KEY UPDATE link=link;
话虽如此,您不应该使用ext/mysql
,因为它已被弃用。而是查看PDO
或mysqli
。最好使用参数化查询来防止SQL注入。
答案 1 :(得分:0)
也许
INSERT INTO ... ON DUPLICATE KEY UPDATE
可以解决您的问题。
答案 2 :(得分:0)
如果您不想在存在重复时更新值,可以将两个查询合并为一个:
INSERT INTO linkdb(link,title)
select '$link','$title'
where not exists (SELECT * FROM linkdb WHERE link='$currentlink'))
实际上,您可以通过在linkdb(link)
上创建索引来加快上述任何查询。