三个分表:
www.2cto.com
CREATE TABLE `test_1` (
id INT(11) NOT NULL DEFAULT '0',
email varchar(50) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8
CREATE TABLE `test_2` (
id INT(11) NOT NULL DEFAULT '0',
email varchar(50) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8
CREATE TABLE `test_3` (
id INT(11) NOT NULL DEFAULT '0',
email varchar(50) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8
一个总表: www.2cto.com
CREATE TABLE `test` (
`id` INT(11) NOT NULL DEFAULT '0'
email varchar(50) NOT NULL
key `i_id` (`id`),
) ENGINE=MRG_MyISAM UNION=(test_1,test_2,test_3) DEFAULT CHARSET=UTF8
在总表test上面select *的话,会取出三个分表中的数据。
在插入数据的时候根据对象的hash code 取模运算,如果余数为 3 那么就插入 test_3 这个表中。
因为merge表与他人不一样需要正确的代码形式。
例如,ENGINE=MRG_MyISAM和别人的不一样,别人都是ENGINE=MyISAM,修改后即可以添加数据了。
MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与分裂对 InnoDB 表整体性能影响很大;数据页的这类 *** 作越多,对 InnoDB 表数据写入的影响越大。MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与分裂。
在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)