日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql in partition_MySQL Partition分区扫盲

發(fā)布時間:2023/12/10 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql in partition_MySQL Partition分区扫盲 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。