是否有一种简单的方法来更新所有记录遵循一个索引?

时间:2013-01-09 02:32:44

标签: mysql

像这样:

delete from `table` where id = 3;

insert into table (id, value) values (3, "aaa"), (3, "bbb"), (3, "ccc");

值的数量是数百,与上次相比,很多值都是相同的,只需添加或删除一些记录。

我使用此表来存储人的属性,并且该属性被重复,因此我在表中为一个人插入了许多记录。更新一个属性时,一些记录添加或删除,大多数记录没有更改,但是当我获得新属性集时,我不知道要添加哪个和要删除哪个。所以我必须删除所有旧记录,然后插入新记录,但对我来说太慢了,有更快的方法吗?

3 个答案:

答案 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)

您打算使用主键更新多个表吗? 那么您可以查看thisthis

答案 2 :(得分:0)

使用正确的行设置一个人后,您可以将其复制到此类其他人,例如从id 1复制到2

insert into table (id, value)
select 2, value
from table
where id = 1;