4

我们有一个用于归档旧数据的大型 MyISAM 表。该归档每月执行一次,除这些情况外,永远不会将数据写入表中。无论如何“告诉” MySQL 该表是只读的,以便 MySQL 可以优化从该表读取的性能?我查看了 MEMORY 存储引擎,但问题是这个表太大了,它会占用服务器内存的很大一部分,这是我不想要的。

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

4

3 回答 3

5

而不是取消和重新压缩历史表:如果您想访问单个表的历史记录,您可以使用合并表来合并压缩的只读历史记录表。

因此,假设您有一个活动表和具有相同表结构的压缩历史表,您可以使用以下方案:

表格:

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);
于 2011-09-20T09:04:00.523 回答
1

您可以使用它myisampack来生成快速、压缩的只读表

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

我会说:当然也适用通常的:

  1. 提供适当的索引(基于最常用的查询)
  2. 看看对数据进行聚类(如果这对查询有用的话)
于 2010-05-06T11:17:42.117 回答
1

是的,您可以压缩 myisam 表。

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

于 2010-05-06T11:17:50.567 回答