制作表innodb和分区会提高mysql的性能吗?

时间:2015-08-03 11:42:09

标签: mysql performance

我有一个Myisam表,其中包含2列和9000万数据的复合唯一键。现在我们正面临内存和负载问题,在浏览完网络后,我计划将分区和更改此表更改为Innodb以获得更好的性能。但我有以下顾虑:

  1. 更改为innodb将导致大量停机时间,是否可以最大限度地减少停机时间?

  2. 大多数select查询都在我计划进行哈希分区的键的特定列上,它会对另一个键列的查询产生多大影响?

  3. 这些变化是否会在理论上提升到性能?这种情况有没有更好的解决方案。任何建议或经验都会有所帮助。

    我的查询很简单,如

    Select * from Table where Col1= "Value"
    Select * from Table where Col1="Value" and Col2 IN (V1,V2,V3)

    插入很频繁。

3 个答案:

答案 0 :(得分:1)

InnoDB 可能帮助一些人。转换到InnoDB会带来一些问题,正如我在My conversion blog中所述。

分区本身不会带来任何性能提升。 My partitioning blog列出了4种可以通过设计更改获得性能的案例。

无论引擎如何,您的两个查询都将

中受益
INDEX(col1, col2)

没有任何形式的分区会有所帮助。 HASH分区尤其无用。

转换为InnoDB将需要大量的停机时间,除非pt-online-schema-change适用于您的情况。研究它。

另请阅读我的回答和评论 Can i set up Mysql to auto-partition? 更多细节。

添加该索引可能是主要的性能提升。但你必须做一个冗长的ALTER才能得到它。 MyISAM没有ALGORITHM=INPLACE

答案 1 :(得分:0)

Innodb(我们现在谈论的性能)只有当你的表有很多插入和更新时才有意义,因为行锁定表。 如果您桌面上的大多数查询都是SELECT,那么MyIsam会更快。 建议:将my.cnf key_buffer_size放入等于可用内存的25%。

答案 2 :(得分:0)

如果数据库上的插入非常频繁,您可能会通过切换到innodb获得性能,而innodb不会锁定整个表以插入,允许其他客户端同时选择数据。

关于问题#1,如果您担心停机时间,我建议您找到一个并行转储/加载解决方案,用于将数据迁移到innodb。如果您只是在表上运行ALTER语句,这是一个单线程操作,速度会慢得多。

关于#2,您必须发布架构以及分区策略和您担心的查询。

相关问题