我正在处理的项目目前有一个类别表,以及一个business_category表(一个企业及其类别之间的关联)。我想运行一个查询,它将使用新关联更新business_category中的值,并保留当前存在的值。
我知道我可以做DELETE
语句来先清除关联,然后插入。我的问题是,有更好的方法吗?这是精通表现吗?我想这个查询可能会经常被调用,并且每次运行时删除和重新插入似乎有点极端,如果记录不存在,我真正想做的就是插入。
对于表格结构,business_category
只有两列:business_id
和category_id
。
有人有任何想法吗?我应该继续进行删除吗?或者有更好的方法吗?
提前致谢。
答案 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)")
最后,您基本上希望减少必须执行的写入操作,因为每次在表上编写索引都需要更新。执行大量写入将比执行读取速度慢,并且只编写您需要的内容。
希望有所帮助