[MySQL优化案例]系列 -- 在5.1的分区功能中混用InnoDB和MyISAM
MySQL 5.1中增加了分区(partition)功能,有了这个功能,以前很头疼的分表方案,现在就变得不再那么麻烦了。不过,如果采用了MyISAM引擎,而且在数据量较大的情境下,并发读写仍然是个问题,尤其是对索引的更新。为此,可以在分区表中采用MyISAM和InnoDB引擎混用的方法,大致如下:
mysql> mysql> CREATE TABLE test_part( -> date DATE NOT NULL DEFAULT '0000-00-00', -> comment VARCHAR(20) DEFAULT NULL -> )ENGINE=MyISAM -> PARTITION BY RANGE (to_days(date)) -> ( -> PARTITION nov08 VALUES LESS THAN(TO_DAYS('2008-12-01')), -> PARTITION dec08 VALUES LESS THAN(TO_DAYS('2009-01-01')), -> PARTITION jan09 VALUES LESS THAN(TO_DAYS('2009-02-01')), -> PARTITION feb09 VALUES LESS THAN(TO_DAYS('2009-03-01')), -> PARTITION mar09 VALUES LESS THAN(TO_DAYS('2009-04-01')) ENGINE=InnoDB, -> PARTITION unpart VALUES LESS THAN MAXVALUE -> );
这样的话,就可以利用InnoDB的行锁以及buffer pool实现了对索引以及行记录的并发读写,大大提高效率。不幸的是,目前5.1还不支持这样的混合引擎特性,所以,上面的想法暂时只是美好的愿望了,哈哈。
上面的创意来自:Venu Anuganti,原文出自:http://venublog.com/2009/03/16/mysql-51-mix-of-handlers-in-partitions/
评论
游客 (未验证)
周日, 2010/02/07 - 20:19
Permalink
晕菜。。。美好的创
晕菜。。。美好的创意,差点被你给忽悠了。。嘿嘿,还好仔细啃了下
游客 (未验证)
周一, 2012/12/24 - 18:28
Permalink
晕死。。。。。。。
晕死。。。。。。。。。。。。。美好愿望。。。