加速只读MyISAM表

时间:2010-05-06 11:04:16

标签: mysql performance myisam

我们有一个大型MyISAM表,用于存档旧数据。此归档每月执行一次,除此之外,数据永远不会写入表中。反正有“告诉”MySQL这个表是只读的,以便MySQL可以优化这个表的读取性能吗?我看过MEMORY存储引擎,但问题是这个表太大了,它需要很大一部分服务器内存,这是我不想要的。

希望我的问题很清楚,在数据库管理方面我是新手,所以欢迎任何意见或建议。

3 个答案:

答案 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

(如果必须返回大部分行,不确定是否会损害性能;建议进行测试;压缩和磁盘读取之间可能存在折衷。)

我会说:当然也适用平常:

  1. 提供适当的索引(基于最常用的查询)
  2. 看一下聚类数据(再次,如果这对查询有用)

答案 2 :(得分:1)

是的,你可以压缩myisam表。

以下是5.0的文档:http://dev.mysql.com/doc/refman/5.0/en/myisampack.html