mysql - 如何调优MySQL的存储引擎

标签 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 的性能

最佳答案

我使用过超过 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/

相关文章:

mysql - 如何提高 MyISAM 中 INSERT/UPDATE 查询的性能

mysql - 如何使用像 '*abc' 这样的前缀通配符进行匹配

php - 提交按钮影响的不仅仅是一行

mysql - 如何按一列筛选同时按另一列排序?

mysql - 我应该总是更喜欢 MySQL InnoDB 而不是 MyISAM 吗?

mysql - 减少 MySQL 中非关键数据的写入 I/O?

php - PHP 和 Mysql UTF-8(特殊字符)问题

mysql - 是否可以使用mysql编辑联合表中的数据排序?

mysql - 求和/格查询的最佳索引策略

php - 删除大量数据和主索引