第一種, 開發以前估計該表的數據量之後會比較大,好比商城的訂單表order,那麼在開發以前,建立10個如出一轍的order表,而後userid尾號爲1的,其訂單都放進order1,userid尾號爲2的,放進order2,以此類推,這樣能夠減小表的數據量,加快訪問速度ide
第二種,隨着項目的平穩運營,惟一的訂單表數據量變得很是大,查詢速度很慢,能夠作分表
新建立幾個一摸同樣的訂單表,order1,order2,order3(這些表的id不能設爲自增).... 再建立一個合併表allorder(存儲引擎得是merge存儲引擎,也就是mrg_myisam)code
CREATE TABLE allorder
( id
BIGINT ( 20 ) NOT NULL , subject
VARCHAR ( 200 ) NOT NULL , content
TEXT NOT NULL ,
PRIMARY KEY ( id
)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO union =(order1
,order2
,order3
,...);開發
這裏INSERT_METHOD=0在某些版本可能不工做,須要改爲INSERT_METHOD=NO
注意,合併表也必須和前面的表有相同的結構,類型,長度,包括字段的順序都必須一致it
合併表只能負責查詢工做,若是要進行插入的話,因爲以前的子表主鍵不是自增的,因此須要其餘方法來獲取新增的id,能夠建立一個表來負責建立id,這個表的自增的,後面要往訂單表裏面插入數據的話,得由這個負責建立id的表來建立id,而後根據id獲取應該插入到哪一個表io
update的話,就是根據id來獲取表名,而後找到該數據修改class