不在关联 table 中创建重复行的最有效方法?

Most efficient way to not create duplicate rows in associative table?

我目前正在处理的项目有一个类别 table,以及一个 business_category table(企业与其类别之间的关联)。我想要 运行 一个查询,该查询将使用新关联更新 business_category 中的值,并保留当前存在的值。

我知道我可以做一个 DELETE 语句来首先清除关联,然后再插入。我的问题是,有更好的方法吗?这是精通性能吗?我想这个查询可能会被调用得有点频繁,每次 运行 时删除并重新插入似乎有点极端,而我真正想要做的就是在记录不存在时插入。

对于table结构,business_category只是两列:business_idcategory_id.

有人有什么想法吗?我应该继续删除吗?或者有更好的方法吗?

提前致谢。

我看到了两个选项,这两个选项应该比始终删除所有内容然后插入更新的数据更高效。

1) 首先 select 所有 category_id 的 business_id 正在更新。

2) 从列表中确定哪些 category_id 需要删除,并且只删除那些。

3) 从列表中确定哪些 category_id 需要添加,并且只添加那些。

4)剩下的都是一样的,不用动。

或者您可以:

1) 运行 带有 "ON DUPLICATE KEY UPDATE category_id=category_id" 的 INSERT 查询(这里有一些 docs 关于它)

2) 运行 一个删除查询,其中 business_id 的任何行,并且 category_id 不在更新的 category_id 列表中.这将删除所有不在新更新列表中的现有列表。 ("DELETE .. WHERE category_id NOT IN ($list_of_categories)")

最后你基本上想减少你必须做的事情,因为每次你写 table 上的索引都需要更新。进行大量写入比进行读取并且只写入必须写入的内容要慢。

希望对您有所帮助