【问题标题】:Checking 2 Column for Duplicate检查 2 列是否重复
【发布时间】:2016-09-12 12:29:30
【问题描述】:

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

1) 电子邮件

2) 所有者(user_id)

每次有人上传时,我都需要确保它在系统中不存在。问题是,随着我上传的次数越来越多,检查重复项所花费的时间会急剧增加,如图所示。

问题

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

2) 我索引了 user_id 和电子邮件,我应该全文它吗?我不会阅读文本,而是将其作为一个整体进行搜索,所以索引更符合逻辑?

3) 我还阅读了有关结合电子邮件和所有者 ID 创建哈希然后索引哈希的信息。会不会和现在的方式有很大的不同?

4) 我想到的最后一个方法是为 email 和 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]
              );
              }

【问题讨论】:

  • 使用 INSERT IGNORE,以防 INSERT 静默失败 LAST_INSERT_ID 将为 0 ,AFAIK。在两列上添加一个 unqiue 索引
  • 所以显示您的数据库架构和您的查询!?
  • @Alex,使用 laravel 而不是原始查询。所以它基本上是,如上所述检查两个列(两个 Wheres),如果你有任何理论来支持它的使用,我也可以使用 Laravel 需要的原始查询。
  • 使用 laravel 你终于执行了查询。但即使你找不到查询本身,你也可以提供 laravel 代码。没有人可以帮助使用虚拟代码 :-) 并且 db 架构仍然是实际的
  • @Alex 我明白你的意思,补充,谢谢。

标签: mysql database laravel optimization database-design


【解决方案1】:

使用 Laravel 验证器:

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

您还应该在数据库中使用unique 约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2020-04-04
    • 2020-09-14
    • 2012-01-10
    • 2018-06-19
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多