2016-05-16 102 views
0

目前,我有一个系统,以保持主数据检查第二栏复制

1)电子邮件

2)所有者(USER_ID)

每当有人上传,我需要做确信它不存在于系统中。当我越来越多地上传时,捕获的时间越来越长,检查重复所花费的时间将会急剧增长,就像所示的图表一样。

问题

1)如何有效检查重复?

2)我索引的user_id和电子邮件应该我全文吗?我不会阅读文本,但会作为一个整体来搜索它,所以索引更合乎逻辑?

3)我还读了关于创建哈希组合电子邮件&所有者id然后索引哈希。这与目前的方法有什么不同?

4)我想到的最后一个方法是为email和user_id创建一个主键,再一次idk如何演出。

请指教。

代码

$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。在 – Mihai

+1

这两列上添加unqiue索引,以显示您的数据库模式和您的查询!? – Alex

+0

@Alex,使用laravel不是原始查询。所以基本上,如上所述检查两列(两个Wheres),如果您有任何支持使用它的理论,我也可以使用Raw查询(如果Laravel需要)。 – CodeGuru

回答

1

使用Laravel验证:

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

而且你应该在你的数据库中使用unique约束。