2

客户想要从一堆不同的来源为他的客户编译一堆数据。我正在构建 PHP/MySQL 服务器架构。我所有的经验都是前端开发和设计,所以我遇到了性能问题,现在有很多数据集。

性能问题是重复数据删除。主 db 表存储域并具有四列:“id”、“domain_name”和两个布尔值,用于确定域是否是客户的可能目标。'domain_name' 列上有一个索引。

我不希望同一个域有多行。这些域以 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)在域列上设置唯一索引会导致欺骗被丢弃吗?

2)有没有其他方法可以加快这个过程?

4

1 回答 1

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);
于 2012-04-29T16:35:47.877 回答