我的数据库只有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性能的建议
答案 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)。如果表格甚至包括单个可变长度列
,则表格使用动态行格式