查myisam表最可靠方式是查询information_schema.tables并过滤engine='myisam',table_rows为估算值但myisam下较准;show table status可查单表myisam特有状态如key_read_requests,而全局myisam指标需用show status like 'key%'或'myisam%'。

直接查 information_schema.TABLES 加 SHOW TABLE STATUS 过滤,但要注意 MyISAM 状态字段只在引擎为 MyISAM 时有效,且部分状态(如 Key_read_requests)必须用 SHOW STATUS 查全局/会话级指标。
查哪些表是 MyISAM 引擎
最可靠的方式是查 information_schema.TABLES,过滤 ENGINE = 'MyISAM':
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, ROW_FORMAT, TABLE_ROWS
FROM information_schema.TABLES
WHERE ENGINE = 'MyISAM'
AND TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
-
TABLE_ROWS是估算值,MyISAM 下相对准确(因为不走 MVCC,元数据存磁盘),但若表刚被修改过未 ANALYZE,可能滞后 - 别漏掉
TABLE_SCHEMA NOT IN (...),系统库里的 MyISAM 表(比如mysql.plugin)通常不需监控 - 如果只想看某个库,把
TABLE_SCHEMA = 'your_db'加进 WHERE
查单个 MyISAM 表的详细运行状态
SHOW TABLE STATUS 是唯一能拿到 MyISAM 特有状态(如索引缓存命中、键读写次数)的命令,但只能查单表或当前库所有表:
SHOW TABLE STATUS LIKE 'your_table'; -- 或切换到目标库后: USE your_db; SHOW TABLE STATUS WHERE Engine = 'MyISAM';
- 关键字段:
Key_read_requests(逻辑读索引请求数)、Key_reads(物理读索引次数)、Key_write_requests/Key_writes—— 这些反映 MyISAM 键缓存效率 -
Key_reads / Key_read_requests比值 > 0.01 表示缓存命中率低,可能需要调大key_buffer_size - 注意:
SHOW TABLE STATUS不显示实时增量,是自表打开以来的累计值;重启 mysqld 后清零
查全局 MyISAM 缓存和 I/O 统计
MyISAM 的核心运行指标不在表级,而在服务器状态变量里,必须用 SHOW STATUS:
SHOW STATUS LIKE 'Key%'; SHOW STATUS LIKE 'Myisam%';
-
Key_read_requests和Key_reads是全局累计值,对应所有 MyISAM 表总和 -
Myisam_have_read、Myisam_have_write表示是否启用了 MyISAM 表锁优化(一般为 ON) - 这些值不能按表拆分 —— MySQL 不提供 per-table 的 MyISAM 状态变量,这是设计限制
真正麻烦的是:没有一条 SQL 能同时拉出“所有 MyISAM 表名 + 各自的 Key_reads”。你得先用 information_schema 拿表列表,再循环对每个表执行 SHOW TABLE STATUS,或者接受用全局统计代替单表分析。后者在多表混用场景下容易掩盖热点表问题。











