mysql in partition_MySQL Partition分区扫盲
MySQL從5.1.3開始支持Partition,你可以使用如下命令來確認(rèn)你的版本是否支持Partition:
mysql> SHOW VARIABLES LIKE '%partition%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| have_partitioning | YES |
+-------------------+-------+
MySQL支持 RANGE,LIST,HASH,KEY 分區(qū)類型,其中以RANGE最為常用:
CREATE TABLE foo (
id INT NOT NULL AUTO_INCREMENT,
created DATETIME,
PRIMARY KEY( id, created )
) ENGINE=INNODB
PARTITION BY RANGE (TO_DAYS(created)) (
PARTITION foo_1 VALUES LESS THAN ( TO_DAYS('2009-01-01') ),
PARTITION foo_2 VALUES LESS THAN ( TO_DAYS('2010-01-01') )
)
partition表達(dá)式中用于分區(qū)的條件,一定要是數(shù)值型的字段(比如 id) 或者 能返回?cái)?shù)值的函數(shù),如 TO_DAYS() , MONTH() 這樣的函數(shù)
即便創(chuàng)建完分區(qū),也可以在后期管理,比如說添加一個新的分區(qū):
ALTER TABLE foo ADD PARTITION (
PARTITION foo_3 VALUES LESS THAN ( TO_DAYS('2011-01-01') )
)
或者刪除一個分區(qū)L: ALTER TABLE FOO DROP PARTITION foo_3;
通過檢索 information_schema 數(shù)據(jù)庫,能看到我們剛剛創(chuàng)建的分區(qū)信息:
SELECT * FROM information_schema.PARTITIONS WHERE PARTITION_NAME IS NOT NULL
此時,打開MySQL的數(shù)據(jù)目 SHOW VARIABLES LIKE 'datadir'
如果MySQL配置設(shè)置了 Innodb file per table 為 ON 的話,由于上面定義的是 InnoDB,則會發(fā)現(xiàn):
foo#p#foo_1.ibd
foo#p#foo_2.ibd
如果創(chuàng)建的是MyISAM表類型的話,則會發(fā)現(xiàn):
foo#P#foo_1.MYD
foo#P#foo_1.MYI
foo#P#foo_2.MYD
foo#P#foo_2.MYI
由此可知通過分區(qū),MySQL會把數(shù)據(jù)保存到不同的數(shù)據(jù)文件里,同時索引也是分區(qū)的,相對未分區(qū)的表來說,分區(qū)后單獨(dú)的數(shù)據(jù)文件和索引文件的大小都明顯降低,效率則明顯提升。為了驗(yàn)證這一點(diǎn),我們做如下實(shí)驗(yàn):
INSERT INTO `foo` (`id`, `created`) VALUES ( 1, '2008-01-02 00:00:00' ) , ( 2, '2009-01-02 00:00:00' );
然后執(zhí)行SQL: EXPLAIN PARTITIONS SELECT * FROM foo WHERE created = '2008-01-02';
會看到MySQL僅僅在foo_1分區(qū)執(zhí)行這條查詢。理論上效率肯定會快一些,至于具體多少,就看數(shù)據(jù)量了。實(shí)際應(yīng)用分區(qū)的時候,我們還可以通過 DATA DIRECTORY 和 INDEX DIRECTORY 選項(xiàng)把不同的分區(qū)分散到不同的磁盤上,從而進(jìn)步一提高系統(tǒng)的IO吞吐量。
重要提示:使用分區(qū)功能之后,相關(guān)查詢最好都用EXPLAIN PARTITIONS過一遍,確認(rèn)分區(qū)是否生效。
到底應(yīng)該采用哪種分區(qū)類型呢?通常來說使用range類型是個不錯的選擇,不過也不盡然,比如說在主從結(jié)構(gòu)中,主服務(wù)器由于很少使用SELECT查詢,所以在主服務(wù)器上使用range類型的分區(qū)通常并沒有太大意義,此時使用hash類型的分區(qū)相對更好一些,假設(shè)使用PARTITION BY HASH(id) PARTITIONS 10,那么當(dāng)插入新數(shù)據(jù)時,會根據(jù)id把數(shù)據(jù)平均分散到各個分區(qū)上,由于文件小,所以效率高,更新操作會變得更快。
分區(qū)雖然很爽,但目前的實(shí)現(xiàn)還有很多限制:
主鍵 或 唯一索引 必須包含分區(qū)字段: 如 PRIMARY KEY(id, created)
很多時候,使用了分區(qū)就不要再使用主鍵,否則可能影響性能。
只能通過int類型的字段或者返回int類型的表達(dá)式來分區(qū):通常使用YEAR或TO_DAYS等函數(shù)。
每個表最多1024個分區(qū):不可能無限制的擴(kuò)展分區(qū),而且過度使用分區(qū)往往會消耗大量系統(tǒng)內(nèi)存。
采用分區(qū)的表不支持外鍵:相關(guān)的約束邏輯必須通過程序來實(shí)現(xiàn)
LIST 類型
CREATE TABLE category (
cid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY LIST (cid) (
PARTITION p0 VALUES IN (0,4,8,12)
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',
PARTITION p1 VALUES IN (1,5,9,13)
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx',
PARTITION p2 VALUES IN (2,6,10,14)
DATA DIRECTORY = '/data4/data'
INDEX DIRECTORY = '/data5/idx',
PARTITION p3 VALUES IN (3,7,11,15)
DATA DIRECTORY = '/data6/data'
INDEX DIRECTORY = '/data7/idx'
);
分成4個區(qū),數(shù)據(jù)文件和索引文件單獨(dú)存放
[ 重建分區(qū) ]
RANGE 分區(qū)重建:
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));
將原來的 p0,p1 分區(qū)合并起來,放到新的 p0 分區(qū)中。
LIST 分區(qū)重建:
ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
將原來的 p0,p1 分區(qū)合并起來,放到新的 p0 分區(qū)中。
HASH/KEY 分區(qū)重建:
ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2;
用 REORGANIZE 方式重建分區(qū)的數(shù)量變成2,在這里數(shù)量只能減少不能增加。想要增加可以用 ADD PARTITION 方法。
[ 新增分區(qū) ]
ALTER TABLE `results` PARTITION BY RANGE ( MONTH(created) )
( PARTITION p0 VALUES LESS THAN (1),
PARTITION p1 VALUES LESS THAN (2) ,
PARTITION p2 VALUES LESS THAN (3) ,
PARTITION p3 VALUES LESS THAN (4) ,
PARTITION p4 VALUES LESS THAN (5) ,
PARTITION p5 VALUES LESS THAN (6) ,
PARTITION p6 VALUES LESS THAN (7) ,
PARTITION p7 VALUES LESS THAN (8) ,
PARTITION p8 VALUES LESS THAN (9) ,
PARTITION p9 VALUES LESS THAN (10) ,
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION P12 VALUES LESS THAN MAXVALUE
);
默認(rèn)分區(qū)限制分區(qū)字段必須是主鍵(PRIMARY KEY ) 的一部分
mysql Partition(分區(qū))初探
mysql?Partition(分區(qū))初探 ? 表數(shù)據(jù)量大的時候一般都考慮水平拆分,即所謂的sharding.不過mysql本身具有分區(qū)功能,可以實(shí)現(xiàn)一定程度 的水平切分.? mysql是具有MERG ...
MySQL partition分區(qū)I
http://blog.csdn.net/binger819623/article/details/5280267 一.? ?? ???分區(qū)的概念二.? ?? ???為什么使用分區(qū)?(優(yōu)點(diǎn))三.? ? ...
MYSQL之水平分區(qū)----MySQL partition分區(qū)I(5.1)
一.? ?? ???分區(qū)的概念 二.? ?? ???為什么使用分區(qū)?(優(yōu)點(diǎn)) 三.? ?? ???分區(qū)類型 四.? ?? ???子分區(qū) 五.? ?? ???對分區(qū)進(jìn)行修改(增加.刪除.分解.合并) 六 ...
MySQL PARTITION 分區(qū)
MySQL HASH分區(qū) http://www.cnblogs.com/chenmh/p/5644496.html RANGE分區(qū):http://www.cnblogs.com/chenmh/p/56 ...
mysql partition分區(qū)
(轉(zhuǎn)) 自5.1開始對分區(qū)(Partition)有支持 = 水平分區(qū)(根據(jù)列屬性按行分)=舉個簡單例子:一個包含十年發(fā)票記錄的表可以被分區(qū)為十個不同的分區(qū),每個分區(qū)包含的是其中一年的記錄. === 水 ...
mysql的partition分區(qū)
前言:當(dāng)一個表里面存儲的數(shù)據(jù)特別多的時候,比如單個.myd數(shù)據(jù)都已經(jīng)達(dá)到10G了的話,必然導(dǎo)致讀取的效率很低,這個時候我們可以采用把數(shù)據(jù)分到幾張表里面來解決問題.方式一:通過業(yè)務(wù)邏輯根據(jù)數(shù)據(jù)的大小通過 ...
mysql表分區(qū) partition
表分區(qū) partition 當(dāng)一張表的數(shù)據(jù)非常多的時候,比如單個.myd文件都達(dá)到10G, 這時,必然讀取起來效率降低. 可不可以把表的數(shù)據(jù)分開在幾張表上? 1: 從業(yè)務(wù)角度可以解決.. (分表,水平 ...
mysql的分區(qū)和分表
分區(qū) 分區(qū)就是把一個數(shù)據(jù)表的文件和索引分散存儲在不同的物理文件中. mysql支持的分區(qū)類型包括Range.List.Hash.Key,其中Range比較常用: RANGE分區(qū):基于屬于一個給定連續(xù)區(qū) ...
MySQL表分區(qū)技術(shù)
MySQL表分區(qū)技術(shù) MySQL有4種分區(qū)類型: 1.RANGE 分區(qū) - 連續(xù)區(qū)間的分區(qū) - 基于屬于一個給定連續(xù)區(qū)間的列值,把多行分配給分區(qū): 2.LIST 分區(qū) - 離散區(qū)間的分區(qū) - 類似于按 ...
隨機(jī)推薦
Jenkins的一個bug-同時build一個項(xiàng)目兩次導(dǎo)致失敗
我們有一個job A, A只是配置了一些參數(shù),它會去觸發(fā)模板job B. 我一開始點(diǎn)擊構(gòu)建A, 馬上發(fā)現(xiàn)參數(shù)配置不對,于是撤消了構(gòu)建,但是我沒有發(fā)現(xiàn)B已經(jīng)被觸發(fā),我重新配置參數(shù),然后再次構(gòu)建A,這個時 ...
HTML5樹葉飄落動畫
查看效果:http://keleyi.com/keleyi/phtml/css3/15.htm 請使用Chrome瀏覽器查看本效果. html源代碼: &l ...
maven dependencies 里面的包怎么導(dǎo)出
進(jìn)入工程pom.xml 所在的目錄下,輸入以下命令:mvn dependency:copy-dependencies -DoutputDirectory=lib更簡單的 mvn dependency: ...
IOS第七天(6:UiTableView編輯模式, 拖動位置 ,滑動刪除)
**********UiTableView編輯模式, 拖動位置 ,滑動刪除 #import "HMViewController.h" @interface HMViewContro ...
Ubuntu查看磁盤空間命令(轉(zhuǎn)載)
linux中df命令的功能是用來檢查linux服務(wù)器的文件系統(tǒng)的磁盤空間占用情況.可以利用該命令來獲取硬盤被占用了多少空間,目前還剩下多少空間等信息. 1.命令格式: df?[選項(xiàng)]?[文件] 2.命 ...
Application、Session、Cookie、ViewState的特性
http://blog.csdn.net/zyw_anquan/article/details/7664132 ? Application的特性: 存儲的物理位置:服務(wù)器端內(nèi)存. 存儲的類型限制:任意 ...
Visual Studio的性能測試工具
vs果然是宇宙最強(qiáng)大的IDE,這句話我經(jīng)常掛在嘴邊,反正覺得它挺強(qiáng)大 整個聽技術(shù)經(jīng)理說性能測試,然后我就覺得宇宙最強(qiáng)大的IDE應(yīng)該 也有測試工具吧,那么我就百度了一下,又看看vs的選項(xiàng),果然真有一個性 ...
Merge OUTPUT 高級用法綜合寫的一個MergeTab的存儲過程
因?yàn)楣ぷ髦谐S玫?合并兩張表中的數(shù)據(jù),主要是寫下來給自己備忘,T-SQL 中 MERGE 的用法 WHEN MATCHED THEN UPDATE -- 中加了 后面要更新的列是否都相等,如果相等就沒 ...
[Alpha階段]測試報(bào)告
[Alpha]階段測試報(bào)告 在測試過程中發(fā)現(xiàn)的BUG ? 在最后的測試階段中,我們不可避免的遇到了各種各樣的BUG.雖然大多數(shù)都不是嚴(yán)重的BUG,但是這些細(xì)枝末節(jié)的問題的堆積,依然會很大程度上降低用戶 ...
常見模塊(五) random模塊
random隨機(jī)函數(shù)中的常用方法 1.random.random 返回一個介于左閉右開[0.0, 1.0)區(qū)間的浮點(diǎn)數(shù) print(random.random()) 2.random.randrang ...
總結(jié)
以上是生活随笔為你收集整理的mysql in partition_MySQL Partition分区扫盲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cpunumber.exe是什么进程 能
- 下一篇: 源码mysql5.7安装过程_mysql