如何调整 MySQL 的存储引擎

How to Tune Storage engine of MySQL

我的数据库只有 500 万行,但是内连接和 IN 花费了很多时间(55 秒,60 秒)。所以我正在检查我的 MyISAM 设置是否有问题。

查询: 显示状态 'key%'

+------------------------+-------------+
| Variable_name          | Value       |
+------------------------+-------------+
| Key_blocks_not_flushed | 0           | 
| Key_blocks_unused      | 275029      | 
| Key_blocks_used        | 3316428     | 
| Key_read_requests      | 11459264178 | 
| Key_reads              | 3385967     | 
| Key_write_requests     | 91281692    | 
| Key_writes             | 27930218    | 
+------------------------+-------------+

给我你的建议以提高 MyISAM 的性能

我使用过超过 45GB 的数据库,我也遇到过性能问题,

以下是我为提高性能而采取的一些步骤。

(1) 删除 table 上任何不必要的索引,特别注意 UNIQUE 索引,因为它们会禁用更改缓冲。如果您没有理由使用该约束,请不要使用 UNIQUE 索引;更喜欢常规的 INDEX。

(2) 按顺序插入会导致分页较少(在不在内存中的tables上表现更差),批量加载与table大小没有具体关系, 但它有助于减少重做日志压力。

(3) 如果批量加载新的 table,则延迟创建除 PRIMARY KEY 之外的任何索引。如果您在加载所有数据后创建它们,那么 InnoDB 能够应用预排序和批量加载过程,这既更快又通常会产生更紧凑的索引。此优化在 MySQL 5.5 中成为现实。

(4) 确保使用 InnoDB 而不是 MyISAM。 MyISAM 可以更快地插入到 table 的末尾。 Innodb是行级锁,MYISAM是table级锁

(5)尽量避免在频繁更新的MyISAM table上进行复杂的SELECT查询,使用which return less result on first condition[=10=这样的查询]

(6) 对于频繁变化的MyISAM table,尽量避免所有变长列(VARCHAR、BLOB、TEXT)。如果 table 包含一个变长列,则它使用动态行格式