客户希望从一堆不同的来源为他的客户编译一堆数据。我正在构建一个PHP / MySQL服务器架构。我的所有经验都是前端开发和设计,所以我遇到了性能问题,现在有很多数据集。
性能问题是重复数据删除。主db表存储域并有四列:'id','domain_name'和两个布尔值,用于确定域是否是客户的可能目标。 “domain_name”列上有一个INDEX。
我不希望同一个域有多行。域名以30,000的形式到达,现在我正在使用:
if(!(Domain::find_by_domain($d->n))) {
// insert into db
}
我也试过了:
$already_in_db = Domain::list_domains();
if(!in_array($already_in_db)) {
// insert into db
}
目前表中只有大约170,000个域,这两种方法都需要很长时间。
1)在域列上设置UNIQUE INDEX会导致欺骗被丢弃吗?
2)还有其他方法可以加快这个过程吗?
答案 0 :(得分:2)
在域名列UNIQUE
上创建索引,如果域已存在,则INSERT
语句将失败(如果您需要,可以使用REPLACE
或INSERT ... ON DUPLICATE KEY UPDATE
在发生这种冲突时更改数据):
ALTER TABLE tbl_name
DROP INDEX name_of_existing_index,
ADD UNIQUE INDEX name_of_existing_index (domain_name);