像这样:
delete from `table` where id = 3; insert into table (id, value) values (3, "aaa"), (3, "bbb"), (3, "ccc");
值的数量是数百,与上次相比,很多值都是相同的,只需添加或删除一些记录。
我使用此表来存储人的属性,并且该属性被重复,因此我在表中为一个人插入了许多记录。更新一个属性时,一些记录添加或删除,大多数记录没有更改,但是当我获得新属性集时,我不知道要添加哪个和要删除哪个。所以我必须删除所有旧记录,然后插入新记录,但对我来说太慢了,有更快的方法吗?
答案 0 :(得分:1)
我认为你所做的可能是最快的方法,当人均记录数相对于整个表中的记录数量较小时,提高速度的唯一明显方法是在上面创建一个非唯一索引。 id列。
如果你愿意进行一些非规范化,另一种做你想要的方法是将属性组合成逗号分隔值。因此,您只需更新一行,而不是删除然后插入多行:
update table set id=3, values="aaa,bbb,ccc" where id=3;
使用此功能,您将无法按values
进行搜索,除非您手动维护反向索引,并且values
不能包含逗号(或您使用的任何终止字符)。使用此技术时可能有用的另一个技巧是用终止字符包围值:
update table set id=3, values=",aaa,bbb,ccc," where id=3;
这样,您仍然可以使用终止字符围绕搜索字词values
进行全文搜索:select * from table where ",aaa," in values
此外,您将无法指定唯一约束,因此您必须确保在应用程序逻辑中没有重复的值条目。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用正确的行设置一个人后,您可以将其复制到此类其他人,例如从id 1复制到2
insert into table (id, value)
select 2, value
from table
where id = 1;