如何调整 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 包含一个变长列,则它使用动态行格式
我的数据库只有 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 包含一个变长列,则它使用动态行格式