<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
基於給定的分割區個數,將資料分配到不同的分割區,HASH分割區只能針對整數進行HASH,對於非整形的欄位只能通過表示式將其轉換成整數。表示式可以是mysql中任意有效的函數或者表示式,對於非整形的HASH往表插入資料的過程中會多一步表示式的計算操作,所以不建議使用複雜的表示式這樣會影響效能。
MYSQL支援兩種HASH分割區,常規HASH(HASH)和線性HASH(LINEAR HASH)。
常規hash是基於分割區個數的取模(%)運算。根據餘數插入到指定的分割區
CREATE TABLE tbhash ( id INT NOT NULL, store_id INT ) PARTITION BY HASH(store_id) PARTITIONS 4 ;
ALTER TABLE tbhash ADD INDEX ix_store_id(store_id);
INSERT INTO tbhash() VALUES(1,100),(1,101),(2,102),(3,103),(4,104); 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='tbhash';
其中100,104對4取模是0所以這兩條資料被分配到了p0分割區。
2.時間型別欄位
CREATE TABLE employees ( id INT NOT NULL, hired DATE NOT NULL DEFAULT '1970-01-01', ) PARTITION BY HASH( YEAR(hired) ) PARTITIONS 4;
常規hash的分割區非常的簡便,通過取模的方式可以讓資料非常平均的分佈每一個分割區,但是由於分割區在建立表的時候已經固定了。如果新增或者收縮分割區的資料遷移比較大。
LINEAR HASH和HASH的唯一區別就是PARTITION BY LINEAR HASH
CREATE TABLE tblinhash ( id INT NOT NULL, hired DATE NOT NULL DEFAULT '1970-01-01' ) PARTITION BY LINEAR HASH( YEAR(hired) ) PARTITIONS 6;
線性HASH的計算原理如下:
假設分割區個數num=6,N表示資料最終儲存的分割區
sep1:V = POWER(2, CEILING(LOG(2, num))),LOG()是計算NUM以2為底的對數,CEILING()是向上取整,POWER()是取2的次方值;如果num的值是2的倍數那麼這個表示式計算出來的結果不變。
V=POWER(2,CEILING(LOG(2,6)))
V=POWER(2,3)
V=8
sep2:N=values&(V-1);&位與運算,將兩個值都轉換成2進行求與運算,當都為1才為1;當num是2的倍數時由於V計算出來的結果不變,這時values&(V-1)=MOD(values/num)和時間HASH取模算出的結果是一致的,這時特殊情況只有當分割區是2的倍數才是這種 情況。values是YEAR(hired)的值
sep3:while N>=num
sep3-1:N=N& (CEIL(V/ 2)- 1)
例如:
1.當插入的值是'2003-04-14'時
V = POWER(2, CEILING( LOG(2,6) )) = 8
N = YEAR('2003-04-14') & (8 - 1)
= 2003 & 7
=3
(3 >= 6 is FALSE: record stored in partition #3),N不大於num所以儲存在第3分割區,注意這裡的3指的是P3,分割區號是從P0開始。
2.當插入的值是‘1998-10-19’
V = POWER(2, CEILING( LOG(2,6) )) = 8
N = YEAR('1998-10-19') & (8-1)
= 1998 & 7
= 6
(6 >= 6 is TRUE: additional step required),由於N>=num所以要進行第三步操作
N=N&(CEILING(8/2)-1)
=6&3
=2
(2>=6is FALSE:recored in partition #2),由於2不大於6所以儲存在第2個分割區,注意這裡的3指的是P2,分割區號是從P0開始。
INSERT INTO tblinhash() VALUES(1,'2003-04-14'),(2,'1998-10-19'); 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='tblinhash';
EXPLAIN SELECT * FROM tblinhash WHERE hired='2003-04-14';
常規HASH和線性HASH的增加收縮分割區的原理是一樣的。增加和收縮分割區後原來的資料會根據現有的分割區數量重新分佈。HASH分割區不能刪除分割區,所以不能使用DROP PARTITION操作進行分割區刪除操作;
只能通過ALTER TABLE ... COALESCE PARTITION num來合併分割區,這裡的num是減去的分割區數量;
可以通過ALTER TABLE ... ADD PARTITION PARTITIONS num來增加分割區,這裡是null是在原先基礎上再增加的分割區數量。
減去3個分割區
ALTER TABLE tblinhash COALESCE PARTITION 3;
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='tblinhash';
注意:減去兩個分割區後,資料根據現有的分割區進行了重新的分佈,以'2003-04-14'為例:POWER(2, CEILING( LOG(2,3) ))=4,2003&(4-1)=3,3>=3,3&(CEILING(3/2)-1)=1,所以現在的'2003-04-14'這條記錄由原來的p3變成了p1
增加4個分割區
ALTER TABLE tblinhash add PARTITION partitions 4;
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='tblinhash';
當在3個分割區的基礎上增加4個分割區後,‘2003-04-14’由原來的p1變成了p3,而另一條記錄由原來的p2變成了p6
ALTER TABLE tablename REMOVE PARTITIONING ;
注意:使用remove移除分割區是僅僅移除分割區的定義,並不會刪除資料和drop PARTITION不一樣,後者會連同資料一起刪除
分割區系列文章:
RANGE分割區:https://www.jb51.net/article/244269.htm
COLUMN分割區:https://www.jb51.net/article/96515.htm
LIST分割區:https://www.jb51.net/article/244256.htm
HASH分割區:https://www.jb51.net/article/244277.htm
KEY分割區:https://www.jb51.net/article/244282.htm
子分割區:https://www.jb51.net/article/244294.htm
指定各分割區路徑:https://www.jb51.net/article/244296.htm
分割區索引以及分割區介紹總結:https://www.jb51.net/article/244300.htm
常規HASH的資料分佈更加均勻一些,也便於理解;目前還沒有徹底理解為什麼線性HASH在收縮和增加分割區時處理的速度會更快,同時線性HASH的資料分佈不均勻。
到此這篇關於MySQL分割區之HASH分割區的文章就介紹到這了,更多相關MySQL HASH分割區內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45