对于mysql数据库,我有两个类似的表:
1.st table track_tag (200万行)
id(int),track_id(int),tag(varchar)
2.表 标记(150.000行)
id(int),tag(varchar)
我想用第二个表的主键规范化第一个表标记列。 解决这个问题的最快方法是什么?
答案 0 :(得分:1)
假设您不在生产数据库上工作(因此长时间运行的查询,删除/重新创建表等都可以) - 那么我认为最快的方式是使用Create Table AS SELECT statement。
例如:
CREATE TABLE track_tag_V2 AS SELECT track.id AS id, track.track_id, tag.id AS tag_id
FROM track_tag track, tag
WHERE track.tag = tag.tag
;
然后(假设结构符合您的喜好)只需DROP track_tag
然后RENAME track_tag_V2 to track_tag
即可完成!
但是, <和 强>方式。如果您的数据库已经非标准化到此时,可能已经出于性能原因(标准化优化存储而非性能)。它也可能需要进行全面的重新设计(不快速)。
答案 1 :(得分:0)
你的标签表适用于列:id(int),tag(varchar)
注意:假设id字段在这里是主键,其他方面就是创建索引。
但是按照以下更改track_tag表 -
id(int),track_id(int),tag_id(int)
注意:tag_id字段应在此处编入索引。
此处还不清楚track_id字段是什么。