Mysql運用MERGE引擎進行分表
這里所做的分表是指水平拆分,就是多張表數據結構完全一致(所有的數據列一致,不多不少)。
要想用 MERGE引擎,所有需要拆分的表及拆分后的字表,必須為 MYISAM 引擎,這個好難滿足。因為 MYISAM 引擎不支持事務,這在生產實際中極少數據表會采用 MYISAM。因為現在的應用,都想用分布式事務(極麻煩),不用事務那就別提了,辦不到。
將user拆分成二張表user1和user2,
// (備份users表)備份!備份!備份!重要的事情說三遍。 DROP TABLE IF EXISTS users; CREAT users LIKE user1; // 將users表的所有附加屬性都拷貝過來 ALTER TABLE users ENGINE=MRG_MYISAM UNION=(user1,user2) INSERT_METHOD=LAST;
【特注】:在創建完成后,所有對users的操作都可能報一個錯:[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
究其原因,就是拷貝的時候遺漏了。我是遺漏了 CHARSET=utf8 其他小伙伴呢?!!!
還有可能是(網絡上的):
1、查看是不是有一些表不是MYISAM引擎的表,因為MERGE引擎只適用於MYISAM表
2、查看是不是在union的表中含有不存在的表。
3、查看是不是MERGE的時候引用了不在同一個庫的表,並且該表沒有指定數據庫名字。
4、比較各個表的結構(索引、引擎、列、字符集等)是否一致。
5、CHARSET=utf8 等,類似的約定是否一致(全拷貝過來!!!)。
參考資料: