MySQL 5.1中增加了分区(partition)功能,有了这个功能,以前很头疼的分表方案,现在就变得不再那么麻烦了。不过,如果采用了MyISAM引擎,而且在数据量较大的情境下,并发读写仍然是个问题,尤其是对索引的更新。为此,可以在分区表中采用MyISAM和InnoDB引擎混用的方法,大致如下:
mysql> mysql>CREATETABLE test_part(->dateDATENOTNULLDEFAULT'0000-00-00',-> comment VARCHAR(20)DEFAULTNULL->)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/