检查2列是否重复

时间:2016-05-16 16:21:35

标签: mysql database laravel optimization database-design

目前,我有一个系统来保存主要数据

1)电子邮件

2)所有者(user_id)

每次有人上传时,我都需要确保它在系统中不存在。随着我上传的越来越多,检查重复所花费的时间会急剧增加,就像显示的图表一样。

问题

1)如何有效地检查重复?

2)我索引了user_id,电子邮件应该是我的Fulltext吗?我不会阅读文本,但会整体搜索它,所以索引更符合逻辑?

3)我还阅读了关于创建Hash组合email& owner id然后索引哈希的内容。它与当前的方法有很大的不同吗?

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

1 个答案:

答案 0 :(得分:1)

使用Laravel Validator:

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

此外,您应该在数据库中使用unique约束。