不在关联 table 中创建重复行的最有效方法?
Most efficient way to not create duplicate rows in associative table?
我目前正在处理的项目有一个类别 table,以及一个 business_category table(企业与其类别之间的关联)。我想要 运行 一个查询,该查询将使用新关联更新 business_category 中的值,并保留当前存在的值。
我知道我可以做一个 DELETE
语句来首先清除关联,然后再插入。我的问题是,有更好的方法吗?这是精通性能吗?我想这个查询可能会被调用得有点频繁,每次 运行 时删除并重新插入似乎有点极端,而我真正想要做的就是在记录不存在时插入。
对于table结构,business_category
只是两列:business_id
和category_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 上的索引都需要更新。进行大量写入比进行读取并且只写入必须写入的内容要慢。
希望对您有所帮助
我目前正在处理的项目有一个类别 table,以及一个 business_category table(企业与其类别之间的关联)。我想要 运行 一个查询,该查询将使用新关联更新 business_category 中的值,并保留当前存在的值。
我知道我可以做一个 DELETE
语句来首先清除关联,然后再插入。我的问题是,有更好的方法吗?这是精通性能吗?我想这个查询可能会被调用得有点频繁,每次 运行 时删除并重新插入似乎有点极端,而我真正想要做的就是在记录不存在时插入。
对于table结构,business_category
只是两列:business_id
和category_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 上的索引都需要更新。进行大量写入比进行读取并且只写入必须写入的内容要慢。
希望对您有所帮助