2016-04-29 74 views
1

我有500万行数据库,但内部连接和IN需要很长时间(55秒,60秒)。所以我正在检查MyISAM设置是否有问题。如何调整MySQL的存储引擎

查询: SHOW STATUS LIKE '键%'

+------------------------+-------------+ 
| 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

MyISAM是一个可怕的数据库引擎。使用InnoDB如果可以的话,MyISAM将拥有很多功能,例如记录日志,并且不会发生爆炸,并且如果数据损坏则会丢失所有数据。 – tadman

+0

由于某些原因,我不能改变引擎,如果现在不完全是这样的效果......但我们正在使用大量的读取数据......这是最好的MyISAM –

+0

MyISAM对于任何事情都不是“最好的”。它是从20世纪90年代开始的,十多年来一直没有受到太多关注。 InnoDB始终易于扩展,MySQL 5.0到5.7的性能已经有了巨大的提升。我希望你最终能够改变这种情况,你可以在InnoDB的引擎上投入大量的内存,并使其与MyISAM相比飞行。 – tadman

回答

1

我有更多然后45GB数据库的工作,我也面临性能问题,

下面是我为提高性能而采取的一些stpes。 (1)删除表中所有不必要的索引,特别注意UNIQUE索引,因为这些索引会禁用更改缓冲。如果您没有该约束的理由,则不要使用UNIQUE索引;更喜欢常规的INDEX。 (2)按顺序插入将导致更少的页面拆分(对于不在内存中的表格执行更差),并且批量加载与表格大小没有特别的关系,但它有助于减少重做日志压力。 (3)如果批量加载新表,则延迟创建除PRIMARY KEY之外的任何索引。如果您在加载所有数据后创建它们,那么InnoDB就能够应用预分类和批量加载过程,该过程既快又简单,而且结果通常更紧凑。这个优化在MySQL 5.5中成为现实。

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

(5)尽量避免复杂的SELECT查询上MyISAM表经常更新,并使用查询等,其返回关于第一条件少导致

(6)对于频繁更改的MyISAM表,尽量避免使用所有可变长度的列(VARCHAR,BLOB和TEXT)。该表使用动态行格式(如果它甚至包括单个可变长度列)

+0

要从MyISAM更改为INNO,我应用了哪些命令和设置请发送给我命令 –

+0

如果您想要更改表引擎,请使用'ALTER TABLE t1 ENGINE = InnoDB;' –

+0

有关转换的小问题,请参见http:// mysql.rjweb.org/doc.php/myisam2innodb –