前言:
分區(qū)是一種表的設(shè)計(jì)模式,通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表。但是對于應(yīng)用程序來講,分區(qū)的表和沒有分區(qū)的表是一樣的。換句話來講,分區(qū)對于應(yīng)用是透明的,只是數(shù)據(jù)庫對于數(shù)據(jù)的重新整理。本篇文章給大家?guī)淼膬?nèi)容是關(guān)于MySQL中分區(qū)表的介紹及使用場景,有需要的朋友可以參考一下,希望對你有所幫助。
1.分區(qū)的目的及分區(qū)類型
MySQL在創(chuàng)建表的時(shí)候可以通過使用PARTITION BY子句定義每個(gè)分區(qū)存放的數(shù)據(jù)。在執(zhí)行查詢的時(shí)候,優(yōu)化器根據(jù)分區(qū)定義過濾那些沒有我們需要的數(shù)據(jù)的分區(qū),這樣查詢就可以無需掃描所有分區(qū),只需要查找包含需要數(shù)據(jù)的分區(qū)即可。
分區(qū)的另一個(gè)目的是將數(shù)據(jù)按照一個(gè)較粗的粒度分別存放在不同的表中。這樣做可以將相關(guān)的數(shù)據(jù)存放在一起,另外,當(dāng)我們想要一次批量刪除整個(gè)分區(qū)的數(shù)據(jù)也會(huì)變得很方便。
下面簡單介紹下四種常見的分區(qū)類型:
上述四種分區(qū)類型中,RANGE分區(qū) 即范圍分區(qū)是最常用的。RANGE分區(qū)的特點(diǎn)是多個(gè)分區(qū)的范圍要連續(xù),但是不能重疊,默認(rèn)情況下使用VALUES LESS THAN屬性,即每個(gè)分區(qū)不包括指定的那個(gè)值。
2.分區(qū)操作示例
本節(jié)內(nèi)容以RANGE分區(qū)為例,介紹下分區(qū)表相關(guān)的操作。
# 創(chuàng)建分區(qū)表 mysql> CREATE TABLE `tr` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 -> PARTITION BY RANGE( YEAR(purchased) ) ( -> PARTITION p0 VALUES LESS THAN (1990), -> PARTITION p1 VALUES LESS THAN (1995), -> PARTITION p2 VALUES LESS THAN (2000), -> PARTITION p3 VALUES LESS THAN (2005), -> PARTITION p4 VALUES LESS THAN (2010), -> PARTITION p5 VALUES LESS THAN (2015) -> ); Query OK, 0 rows affected (0.28 sec) # 插入數(shù)據(jù) mysql> INSERT INTO `tr` VALUES -> (1, 'desk organiser', '2003-10-15'), -> (2, 'alarm clock', '1997-11-05'), -> (3, 'chair', '2009-03-10'), -> (4, 'bookcase', '1989-01-10'), -> (5, 'exercise bike', '2014-05-09'), -> (6, 'sofa', '1987-06-05'), -> (7, 'espresso maker', '2011-11-22'), -> (8, 'aquarium', '1992-08-04'), -> (9, 'study desk', '2006-09-16'), -> (10, 'lava lamp', '1998-12-25'); Query OK, 10 rows affected (0.03 sec) Records: 10 Duplicates: 0 Warnings: 0
創(chuàng)建后可以看到,每個(gè)分區(qū)都會(huì)對應(yīng)1個(gè)ibd文件。上面創(chuàng)建語句還是很好理解的,在此分區(qū)表中,通過YEAR函數(shù)取出DATE日期中的年份并轉(zhuǎn)化為整型,年份小于1990的存儲(chǔ)在分區(qū)p0中,小于1995的存儲(chǔ)在分區(qū)p1中,以此類推。請注意,每個(gè)分區(qū)的定義順序是從最低到最高。為了防止插入的數(shù)據(jù)因找不到相應(yīng)分區(qū)而報(bào)錯(cuò),我們應(yīng)該及時(shí)創(chuàng)建新的分區(qū)。下面繼續(xù)展示關(guān)于分區(qū)維護(hù)的其他操作。
# 查看某個(gè)分區(qū)的數(shù)據(jù) mysql> SELECT * FROM tr PARTITION (p2); +------+-------------+------------+ | id | name | purchased | +------+-------------+------------+ | 2 | alarm clock | 1997-11-05 | | 10 | lava lamp | 1998-12-25 | +------+-------------+------------+ 2 rows in set (0.00 sec) # 增加分區(qū) mysql> alter table tr add partition( -> PARTITION p6 VALUES LESS THAN (2020) -> ); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 # 拆分分區(qū) mysql> alter table tr reorganize partition p5 into( -> partition s0 values less than(2012), -> partition s1 values less than(2015) -> ); Query OK, 0 rows affected (0.26 sec) Records: 0 Duplicates: 0 Warnings: 0 # 合并分區(qū) mysql> alter table tr reorganize partition s0,s1 into ( -> partition p5 values less than (2015) -> ); Query OK, 0 rows affected (0.12 sec) Records: 0 Duplicates: 0 Warnings: 0 # 清空某分區(qū)的數(shù)據(jù) mysql> alter table tr truncate partition p0; Query OK, 0 rows affected (0.11 sec) # 刪除分區(qū) mysql> alter table tr drop partition p1; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 # 交換分區(qū) # 先創(chuàng)建與分區(qū)表同樣結(jié)構(gòu)的交換表 mysql> CREATE TABLE `tr_archive` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.28 sec) # 執(zhí)行exchange交換分區(qū) mysql> alter table tr exchange PARTITION p2 with table tr_archive; Query OK, 0 rows affected (0.13 sec)
3.分區(qū)注意事項(xiàng)及適用場景
其實(shí)分區(qū)表的使用有很多限制和需要注意的事項(xiàng),參考官方文檔,簡要總結(jié)幾點(diǎn)如下:
從上面的介紹中可以看出,分區(qū)表適用于一些日志記錄表。這類表的特點(diǎn)是數(shù)據(jù)量大、并且有冷熱數(shù)據(jù)區(qū)分,可以按照時(shí)間維度來進(jìn)行數(shù)據(jù)歸檔。這類表是比較適合使用分區(qū)表的,因?yàn)榉謪^(qū)表可以對單獨(dú)的分區(qū)進(jìn)行維護(hù),對于數(shù)據(jù)歸檔更方便。
4.分區(qū)表為什么不常用
在我們項(xiàng)目開發(fā)中,分區(qū)表其實(shí)是很少用的,下面簡單說明下幾點(diǎn)原因:
總結(jié):
本文較為詳細(xì)的介紹了MySQL分區(qū)相關(guān)內(nèi)容,如果想使用分區(qū)表的話,建議提早做好規(guī)劃,在初始化的時(shí)候即創(chuàng)建分區(qū)表并制定維護(hù)計(jì)劃,使用得當(dāng)還是比較方便的,特別是有歷史數(shù)據(jù)歸檔需求的表,使用分區(qū)表會(huì)使歸檔更方便。當(dāng)然,關(guān)于分區(qū)表的內(nèi)容還有很多,有興趣的同學(xué)可以找找官方文檔,官方文檔中有大量示例。
以上就是詳解MySQL分區(qū)表的詳細(xì)內(nèi)容,更多關(guān)于MySQL分區(qū)表的資料請關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:阜新 臺(tái)灣 鷹潭 日照 北京 鎮(zhèn)江 貴州 合肥
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解MySQL分區(qū)表》,本文關(guān)鍵詞 詳解,MySQL,分區(qū)表,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。上一篇:詳解mysql DML語句的使用