1. 程式人生 > >MySQL分區

MySQL分區

hash分區 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;

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

技術分享

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

技術分享

按照預定的結果,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‘;

技術分享

可以看到情況如預期一樣


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

ALTER TABLE `partitions` COALESCE PARTITION 2

然後查看分布情況

技術分享

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

MySQL分區