2

クライアントは、さまざまなソースから顧客のために一連のデータをコンパイルしたいと考えています。私は PHP/MySQL サーバー アーキテクチャ上に構築しています。私の経験はすべてフロントエンドの開発と設計にあるため、多くのデータ セットが存在する現在、パフォーマンスの問題に直面しています。

パフォーマンスの問題は重複除外です。メインの db テーブルにはドメインが格納され、「id」、「domain_name」、およびドメインが顧客のターゲットになる可能性があるかどうかを判断するために使用される 2 つのブール値の 4 つの列があります。「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) このプロセスをスピードアップする他の方法はありますか?

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 に答える