用于大型数据集的MySQL数据库建模

时间:2012-04-29 16:32:26

标签: php mysql database

客户希望从一堆不同的来源为他的客户编译一堆数据。我正在构建一个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)还有其他方法可以加快这个过程吗?

1 个答案:

答案 0 :(得分:2)

在域名列UNIQUE上创建索引,如果域已存在,则INSERT语句将失败(如果您需要,可以使用REPLACEINSERT ... ON DUPLICATE KEY UPDATE在发生这种冲突时更改数据):

ALTER TABLE tbl_name
  DROP INDEX name_of_existing_index,
  ADD  UNIQUE INDEX name_of_existing_index (domain_name);