日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

mysql分區管理 - hash分區

系統 2501 0

hash分區的目的是將數據按照某列進行hash計算后更加均勻的分散到各個分區,相比,range和list分區來說,hash分區不需要明確指定一個給定的列值或者列值集合

應該在保存在哪個分區,mysql會自動按照hash計算后完成這些工作,我們只需要基于將要進行hash的列值指定一個列或者表達式,以及可選的指定要分區的表總的分區數量。

下面我們舉一個例子來說,hash分區如何創建。首先我們創建如下的表格:hash_partition_tbl,并插入幾條記錄到表中,如下所示:

mysql分區管理 - hash分區

我們也同時看一下,對應的表空間文件是如何分布的(注意,我們已經設置了innodb_file_per_table=1,即每個表單獨一個ibd文件),我們在對應的datadir目錄下可以看到:

由于我們是分成4個hash區,因此可以看到四個表空間文件,分別是hash_partition_tab#p#pi.ibd,i=0,1,2,3。

這里的hash分區的確定按照如下規則:

mod(YEAR(‘2012-05-01’),4) = mod (2012,4) = 0, 在分區p0;

mod(YEAR(‘2016-05-01’),4) = mod (2016,4) = 0, 在分區p0;

mod(YEAR(‘2010-05-01’),4) = mod (2010,4) = 2, 在分區p2;

mod(YEAR(‘2011-05-01’),4) = mod (2011,4) = 3, 在分區p3;

因此,我們認為 p0有2個記錄,p2和p3分別有1個記錄,p1記錄數為0,那么接下來我們通過查詢information_schema.PARTITIONS表來驗證。

mysql分區管理 - hash分區

之前我們知道range和list分區,如果表中存在primary key或者unique key,則對應分區的列必須是這些key的子集,那么對hash是否有同樣的約束呢,字符類型的列是否可以作為hash分區?接下來我們立刻以實驗為基礎進行驗證。

首先把之前的分區先刪除掉,執行如下命令:

mysql分區管理 - hash分區

發現drop partition命令只能用在RANGE和LIST分區中。

現在我們把a設置為unique key,如果成功,則說明hash分區允許非unique key 作為hash的列,執行如下:

mysql分區管理 - hash分區

說明: 如果將要分區的表有一個唯一的鍵,那么用來作為 HASH 用戶函數的自變數或者主鍵的 column_list 的自變數的任意列都必須是那個鍵的一部分。

下面試一下,字符串列是否可以作為hash分區的列,按照上面的討論和說明,我們認為是不行的,因為hash的計算本質是mod運算,必須是整數。實驗如下:

mysql分區管理 - hash分區

實驗證明:hash的分區必須是整數列。

可以通過下面的命令,進行重新分區:

alter table hash_partition_tbl partition by hash(a) partitions 4;







mysql分區管理 - hash分區


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 新蔡县| 仁寿县| 无棣县| 获嘉县| 三台县| 天津市| 班玛县| 青河县| 巴南区| 新龙县| 宣恩县| 新泰市| 方正县| 昂仁县| 大洼县| 阿坝县| 永吉县| 徐闻县| 玛沁县| 迭部县| 吉安市| 兴业县| 苏尼特右旗| 田林县| 合水县| 延长县| 南涧| 鄂伦春自治旗| 惠州市| 扶余县| 登封市| 绥棱县| 宁都县| 襄樊市| 信丰县| 旅游| 互助| 昆明市| 上栗县| 河曲县| 通城县|