【发布时间】: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