如何调整MySQL的存储引擎

时间:2016-04-29 06:12:37

标签: mysql innodb myisam

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

查询:SHOW STATUS LIKE'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性能的建议

1 个答案:

答案 0 :(得分:1)

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

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

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

(2)按顺序插入将导致更少的页面拆分(这将在不在内存中的表上执行得更糟),并且批量加载与表大小没有特别关系,但它将有助于降低重做日志压力。 / p>

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

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

(5)尽量避免频繁更新的MyISAM表上的复杂SELECT查询,并使用在第一个条件下返回较少结果的查询

(6)对于频繁更改的MyISAM表,请尝试避免使用所有可变长度列(VARCHAR,BLOB和TEXT)。如果表格甚至包括单个可变长度列

,则表格使用动态行格式