2016-05-16 3 views
0

のための2列の確認、私はメインデータ現在、重複

1を保持するシステムを持っている)、電子メール

2)所有者(USER_ID)

誰かがアップロードするたびに、私は確認する必要がありそれがシステムに存在しないことを確認してください。キャッチフレーズは、私がますますアップロードするように、重複をチェックするのにかかる時間は、示されているグラフのように急激に増加します。

質問

1)効率的に重複をチェックするにはどうすればよいですか?

2)私はuser_idを索引付けしました。電子メールでフルテキスト化する必要がありますか?私はテキストを読んでいないだろうが、全体としてそれを探しているので、インデックスはより論理的ですか?

3)私はハッシュを電子メール&と結合し、次にハッシュをインデックス化することについても読んでいます。現在の方法と大きな違いはありますか?

4)最後の方法は、電子メールとuser_idの両方のプライマリキーを作成し、再びパフォーマンスがどのようになるかを考えたものです。

アドバイスをしてください。

コード

$exist = DB::table('contact')->where('email', $row['email'])->where('user_id', $user_id)->count(); 
      if($exist < 1){ 
       DB::table('contact')->insert(
       ['email' => $row['email'], 'name' => $row['name'], 'user_id' => $user_id] 
      ); 
       } 

enter image description here

+0

INSERT IGNOREを使用します。INSERTが黙って失敗した場合は、LAST_INSERT_IDは0、AFAIKになります。両方の列にunqiueインデックスを追加して – Mihai

+1

なので、dbスキーマとクエリを表示してください! – Alex

+0

@Alex、laravel未処理クエリを使用しています。基本的には、両方の列(2つのWheres)をチェックして説明したように、Laravelの使用をサポートする理論があれば、Rawクエリを使用することもできます。 – CodeGuru

答えて

1

使用Laravelバリ:

public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'user_id' => 'required|unique', 
     'email' => 'required|unique', 
]); 
//some logic here 
} 

また、あなたのデータベースにunique制約を使用する必要があります。

関連する問題