[英]How to normalize mysql database table
对于mysql数据库,我有两个相似的表:
1.st表track_tag (200万行)
id(int),track_id(int),标记(varchar)
第2个表格标签 (150.000行)
id(int),标记(varchar)
我想用第二张表的主键规范化第一张表标签列。 解决此问题的最快方法是什么?
假设您不在生产数据库上工作(因此可以使用长时间运行的查询以及删除/重新创建表等操作),那么我认为最快的方法是使用Create Table AS SELECT语句 。
例如:
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
就可以了!
然而,这可能不是 (也可能 不会 )的最好的方式。 如果此时将数据库取消规范化,则可能是出于性能方面的考虑(规范化优化存储而非性能)。 可能还需要重新设计(这并不很快)。
您的标签表可以使用以下列:id(int),tag(varchar)
注意:假设id字段是主键,否则在其上创建索引。
但是请按照以下方式更改track_tag表-
id(int),track_id(int),tag_id(int)
注意:tag_id字段应在此处建立索引。
也不清楚在这里是什么track_id字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.