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

时间:2015-03-10 19:54:44

标签: php mysql

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

我知道我可以做DELETE语句来先清除关联,然后插入。我的问题是,有更好的方法吗?这是精通表现吗?我想这个查询可能会经常被调用,并且每次运行时删除和重新插入似乎有点极端,如果记录不存在,我真正想做的就是插入。

对于表格结构,business_category只有两列:business_idcategory_id

有人有任何想法吗?我应该继续进行删除吗?或者有更好的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

1)首先为正在更新的business_id选择所有category_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)")

最后,您基本上希望减少必须执行的写入操作,因为每次在表上编写索引都需要更新。执行大量写入将比执行读取速度慢,并且只编写您需要的内容。

希望有所帮助