mysql - 只读 MyISAM 表的加速

标签 mysql performance myisam

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

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

最佳答案

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

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

表格:

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);

关于mysql - 只读 MyISAM 表的加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780537/

相关文章:

php - MySQL + PHP 选择日期在今天和 future 两周之间的所有行

ruby - 为什么 Process.fork 会使 OS X 上的 Ruby 变慢?

c++ - 套接字和线程

mysql - UNION 会导致 MyIsam 上的表锁定吗?

MySQL 行长度是我预期的两倍多

MySQL 全文搜索无法正常工作。为什么?

java - 当应用程序尝试将数据写入数据库时​​出现 JBAS011469 错误。 (JBossAS7, MySql)

javascript - 将连接的结果集拆分为行

mysql - 即时计算用户年龄,优化。数据库

mysql - 左连接的慢速选择查询为空并限制结果