只读 MyISAM 表的加速

Ozz*_*zzy 4 mysql performance myisam

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

希望我的问题足够清楚,在数据库管理方面我是新手,因此欢迎任何输入或建议。

小智 5

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

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

表:

compressed_month_1
compressed_month_2
active_month
Run Code Online (Sandbox Code Playgroud)

创建合并表:

create table history_merge like active_month;
alter table history_merge 
    ENGINE=MRG_MyISAM 
    union (compressed_month_1,compressed_month_2);
Run Code Online (Sandbox Code Playgroud)

一个月后,压缩active_month表并将其重命名为compression_month_3。现在表是:

compressed_month_1
compressed_month_2
compressed_month_3
active_month
Run Code Online (Sandbox Code Playgroud)

你可以更新历史表

alter table history_merge 
    union (compressed_month_1, compressed_month_2, compressed_month_3);
Run Code Online (Sandbox Code Playgroud)