在這一章節(jié)里, 我們來了解下 Mysql 中的分區(qū)技術(shù) (RANGE, LIST, HASH)
Mysql 的分區(qū)技術(shù)與水平分表有點(diǎn)類似, 但是它是在邏輯層進(jìn)行的水平分表, 對(duì)于應(yīng)用而言它還是一張表, 換句話說: 分區(qū)不是實(shí)際真正的對(duì)一張表進(jìn)行拆分,分區(qū)之后表還是一個(gè)表,它是把存儲(chǔ)文件進(jìn)行拆分。
在 Mysql 5.1(后) 有了幾種分區(qū)類型:
RANGE分區(qū): 基于屬于一個(gè)給定連續(xù)區(qū)間的列值, 把多行分配給分區(qū)
LIST分區(qū): 類似于按 RANGE 分區(qū), 區(qū)別在于 LIST 分區(qū)是基于列值匹配一個(gè)離散值集合中的某個(gè)值來進(jìn)行選擇
HASH分區(qū): 基于用戶定義的表達(dá)式的返回值來進(jìn)行選擇分區(qū), 該表達(dá)式使用將要插入到表中的這些行的列值進(jìn)行計(jì)算, 這個(gè)函數(shù)可以包含 Mysql 中有效的、產(chǎn)生非負(fù)整數(shù)值的任何表達(dá)式
KEY分區(qū): 累世于按 HASH 分區(qū), 區(qū)別在于 KEY 分區(qū)只支持計(jì)算一列或多列, 且 Mysql 服務(wù)器提供其自身的哈希函數(shù)
分區(qū)應(yīng)該注意的事項(xiàng):
1、 做分區(qū)時(shí),要么不定義主鍵,要么把分區(qū)字段加入到主鍵中
2、 分區(qū)字段不能為NULL,要不然怎么確定分區(qū)范圍呢,所以盡量 NOT NULL
首先你可以查看下你的 Mysql 版本是否支持 PARTITION
復(fù)制代碼 代碼如下:
mysql> show plugins;
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
或者:
復(fù)制代碼 代碼如下:
mysql> show variables like "%part%";
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| have_partitioning | YES |
+-------------------+-------+
RANGE 分區(qū)
假定你創(chuàng)建了一個(gè)如下的表, 該表保存有20家音像店的職員記錄, 這20家音像店的編號(hào)從1到20。 如果你想將其分成4個(gè)小分區(qū), 那么你可以采用RANGE分區(qū), 創(chuàng)建的數(shù)據(jù)庫(kù)表如下:
復(fù)制代碼 代碼如下:
mysql-> CREATE TABLE employees (
-> id INT NOT NULL,
-> fname VARCHAR(30),
-> lname VARCHAR(30),
-> hired DATE NOT NULL DEFAULT '1970-01-01',
-> separated DATE NOT NULL DEFAULT '9999-12-31',
-> job_code INT NOT NULL,
-> store_id INT NOT NULL
-> ) ENGINE=Myisam DEFAULT CHARSET=utf8
-> PARTITION BY RANGE (store_id) (
-> PARTITION P0 VALUES LESS THAN (6),
-> PARTITION P1 VALUES LESS THAN (11),
-> PARTITION P2 VALUES LESS THAN (16),
-> PARTITION P3 VALUES LESS THAN (21)
-> );
新聞熱點(diǎn)
疑難解答
圖片精選