我的数据库只有 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 的性能
最佳答案
我使用过超过 45GB 的数据库,我也遇到过性能问题,
以下是我为提高性能而采取的一些步骤。
(1) 删除表上任何不必要的索引,特别注意 UNIQUE 索引,因为它们会禁用更改缓冲。如果您没有理由使用该约束,请不要使用 UNIQUE 索引;更喜欢常规索引。
(2) 按顺序插入会导致更少的page splits(对于不在内存中的表性能会更差),批量加载与表大小没有具体关系,但有助于降低redo log压力。
(3) 如果批量加载新表,延迟创建除 PRIMARY KEY 之外的任何索引。如果您在加载所有数据后创建它们,那么 InnoDB 能够应用预排序和批量加载过程,这既更快又通常会产生更紧凑的索引。这种优化在 MySQL 5.5 中成为现实。
(4) 确保使用 InnoDB 而不是 MyISAM。 MyISAM 可以更快地插入到表的末尾。 Innodb是行级锁,MYISAM是表级锁
(5)尽量避免对频繁更新的MyISAM表进行复杂的SELECT查询,尽量使用第一种条件返回较少结果的查询
(6)对于频繁变化的MyISAM表,尽量避免所有变长列(VARCHAR、BLOB、TEXT)。如果该表甚至包含单个可变长度列,则该表使用动态行格式
关于mysql - 如何调优MySQL的存储引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930794/