微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 具有重复文本值的表列

我有一个数据库表,其中有一个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(消息)
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;

既然你有这个,我不确定你为什么担心性能删除操作的影响.没有.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐