MySQL分區

分表是將一個大表按照一定的規則分解成多張具有獨立存儲空間的實體表,app讀寫的時候根據事先定義好的規則得到對應的子表名,然後去操作它。而分區是將數據分段劃分在多個位置存放,分區後,表面上還是一張表,但數據散列到多個位置了。app讀寫的時候操作的還是大表名字,db自動去組織分區的數據。

分區類型主要有range、list、hash、key

以常規hash舉例說明分區是如何創建的

常規hash是取模運算

創建一個僱員表,根據id分成4個區,根據取模結果分別分成0,1,2,3四個區

CREATE TABLE `partitions` (
  `id` int(10) NOT NULL,
  `ename` varchar(100) NOT NULL,
  `hired` date NOT NULL DEFAULT '1992-03-03',
  `separated` date NOT NULL DEFAULT '1992-03-03',
  `job` varchar(100) NOT NULL,
  `store_id` int(10) NOT NULL
)
partition by hash (id) partitions 4;

創建成功之後查看數據文件,數據文件和索引文件單獨存放

wKiom1ltfKiwz9XPAABg6EHzL7Q925.jpg-wh_50

然後插入數據測試數據是否已經分區存在

wKiom1ltfT3T_O-RAAA-kqlD_-0510.jpg-wh_50

按照預定的結果,id爲1應該放在分區1,2放在分區2,3放在分區3,4放在分區0

查看分區的分佈情況

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='partitions';

wKioL1lthXiiUbojAABcU0neG-Q811.jpg-wh_50

可以看到情況如預期一樣


hash分區由原來的四個合併成兩個,然後查看數據如何存儲

ALTER TABLE `partitions` COALESCE PARTITION 2

然後查看分佈情況

wKioL1ltiDrjsM73AABH2yr40Fo364.jpg-wh_50

發現數據重新取模存儲到新的分區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章