我们有一个大型MyISAM表,用于存档旧数据。此归档每月执行一次,除此之外,数据永远不会写入表中。反正有“告诉”MySQL这个表是只读的,以便MySQL可以优化这个表的读取性能吗?我看过MEMORY存储引擎,但问题是这个表太大了,它需要很大一部分服务器内存,这是我不想要的。
希望我的问题很清楚,在数据库管理方面我是新手,所以欢迎任何意见或建议。
答案 0 :(得分:4)
而不是取消压缩和重新压缩历史记录表:如果要访问历史记录的单个表,可以使用合并表来组合压缩的只读历史记录表。
因此假设您有一个活动表和具有相同表结构的压缩历史表,您可以使用以下方案:
表格:
compressed_month_1
compressed_month_2
active_month
创建合并表:
create table history_merge like active_month;
alter table history_merge
ENGINE=MRG_MyISAM
union (compressed_month_1,compressed_month_2);
一个月后,压缩 active_month 表并将其重命名为 compressed_month_3 。现在表格是:
compressed_month_1
compressed_month_2
compressed_month_3
active_month
您可以更新历史记录表
alter table history_merge
union (compressed_month_1, compressed_month_2, compressed_month_3);
答案 1 :(得分:1)
您可以使用myisampack
生成fast, compressed, read-only tables。
(如果必须返回大部分行,不确定是否会损害性能;建议进行测试;压缩和磁盘读取之间可能存在折衷。)
我会说:当然也适用平常:
答案 2 :(得分:1)
是的,你可以压缩myisam表。
以下是5.0的文档:http://dev.mysql.com/doc/refman/5.0/en/myisampack.html