這次想寫的系列文跟 Partition Table 有關,相信不管是用 MSSQL, MySQL 或是其他的資料庫都有聽過這個概念,不過我不會特別去說明該如何建立,相信網路上已經有很多建立的方式,我這裡會針對實務上遇到的幾個問題,以及如何解決的來做分享,大概會有以下幾個主題
很多人第一次接觸到 partition Table 的情況是,隨著日子過去,資料量越來越大,搜尋資料的速度越來越慢,開始想找一些方式把資料分散,此時可能會查到幾點
分表:
分區(partition):
綠色框框的 tb1 是沒有建 partition 的 TABLE ,可以看到只有一個 ibd 檔案
紅色框框的 tb2 是有建兩個 partition 的 TABLE,可以看到有兩個 ibd 檔案
圖1
★ 建上面兩個 TABLE 的語法如下
CREATE TABLE `tb1` (
`trans_id` int NOT NULL AUTO_INCREMENT,
`lang_id` int NOT NULL,
`lang` char(5) NOT NULL,
`trans_text` text,
PRIMARY KEY (`trans_id`,`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tb2` (
`trans_id` int NOT NULL AUTO_INCREMENT,
`lang_id` int NOT NULL,
`lang` char(5) NOT NULL,
`trans_text` text,
PRIMARY KEY (`trans_id`,`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY LIST (`lang_id`)
(
PARTITION pt1 VALUES IN (1) ENGINE = InnoDB,
PARTITION pt2 VALUES IN (2) ENGINE = InnoDB
) ;
這裡的 partition (分區) 就是本次主題想討論的,也希望透過接下來的系列分享,讓大家對於 partition 上有更進一步的認識。
資料庫知識相當廣泛,文中若有不正確的地方,也煩請各位大神不吝指教,謝謝
我之前有試著要使用 partition 分區功能,後來發現,如果有用到 foreign key 的話,切分會失敗,等於有一好沒兩好。
對阿,每一種技術都有其限制,就看當下的情境選擇適合的方法