[英]Table column with duplicated text values
我有一个数据库表,其中有一个varchar(200)列。
这是一个包含历史日志信息的表,其中表中大约99.9%的行包含与表中另一行相同的文本消息。
搜索时该数据库的大小和速度成为一个问题。
所以我想我可以将varchar值移动到另一个具有唯一文本值的表,然后在第一个表中为每一行引用该表,但在我更改之前,我想知道是否有更简单的方法这样做的方法?
例如,在我现有的表列上设置一些会自动导致此行为的属性。 这样数据库就会自动维护一个包含唯一文本的表。 我意识到这可能会对删除操作产生很大的性能影响,但这几乎从未进行过。 另外,我真的想避免更改插入日志表的程序。
我一直在使用MySQL,但如果另一个数据库可以这样做,它也可以选择另一个更改数据库。 (MariaDB或其他?)
谢谢
没有属性或任何处理此问题的属性,但您有一个好主意,将varchar数据放在一个单独的表中。 为此,请按照下列步骤操作。
创建包含varchar数据的表,如下所示:
CREATE TABLE log_messages (id int auto_increment primary key, message varchar(200)) ENGINE = MyISAM ROW_FORMAT=FIXED;
插入varchar数据
INSERT INTO log_messages (message) SELECT DISTINCT your_varchar_column FROM your_table;
在原始表中添加新列以引用新的log_messages表
ALTER TABLE your_table ADD COLUMN message_id int not null;
创建参考
UPDATE your_table y INNER JOIN log_messages m ON y.your_varchar_column = m.message SET y.message_id = m.id;
然后,您可以从表中删除varchar列
ALTER TABLE your_table DROP COLUMN your_varchar_column;
既然你有这个,我不确定你为什么担心性能对删除操作的影响。 没有。
这是进行规范化的正确方法,但我的建议是用数字(整数)代替唯一文本.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.