目前,我有一个系统来保存主要数据
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]
);
}
答案 0 :(得分:1)
使用Laravel Validator:
public function store(Request $request)
{
$this->validate($request, [
'user_id' => 'required|unique',
'email' => 'required|unique',
]);
//some logic here
}
此外,您应该在数据库中使用unique
约束。