總結(jié)MySQL的分區(qū)
前言
分區(qū)是指根據(jù)一定的規(guī)則將一個大表分解成多個更小的部分,這里的規(guī)則一般就是利用分區(qū)規(guī)則將表進行水平切分;邏輯上沒有發(fā)生變化但實際上表已經(jīng)被拆分成了多個物理對象,每個分成被劃分成了一個獨立的對象。相對于沒有分區(qū)的當個表而言分區(qū)的表有很多的優(yōu)勢包括: 并發(fā)統(tǒng)計查詢、快速歸檔刪除分區(qū)數(shù)據(jù)、分散存儲、查詢性能更佳。
mysql5.7以后查詢語句支持指定分區(qū)例如:“ SELECT * FROM t PARTITION (p0,p1) WHERE c < 5
”指定分區(qū)同樣適用DELETE, INSERT, REPLACE, UPDATE, and LOAD DATA, LOAD XML
.
數(shù)據(jù)庫版本:mysql5.7.12
是否支持分區(qū)
SHOW PLUGINS ;
查詢partition的的狀態(tài)是active就代表支持分區(qū),如果是源碼安裝的話在編譯的過程中要添加“-DWITH_PARTITION_STORAGE_ENGINE=1 \
”。
注意: MERGE, CSV, or FEDERATED存儲引擎不支持分區(qū),同一個表所有的分區(qū)必須使用相同的存儲引擎,不能分區(qū)1使用MYISAM分區(qū)2又使用INNODB;不同的分區(qū)表可以是不同的存儲引擎。
分區(qū)介紹
目前mysql可用的分區(qū)類型主要有以下幾種:
RANGE分區(qū):基于一個給定的連續(xù)區(qū)間范圍,RANGE主要是基于整數(shù)的分區(qū),對于非整形的字段需要利用表達式將其轉(zhuǎn)換成整形。
LIST分區(qū):是基于列出的枚舉值列表進行分區(qū)。
COLUMNS分區(qū):可以無需通過表達式進行轉(zhuǎn)換直接對非整形字段進行分區(qū),同時COLUMNS分區(qū)還支持多個字段組合分區(qū),只有RANGELIST存在COLUMNS分區(qū),COLUMNS是RANGE和LIST分區(qū)的升級。
HASH分區(qū):基于給定的分區(qū)個數(shù),將數(shù)據(jù)分配到不同的分區(qū),HASH分區(qū)只能針對整數(shù)進行HASH,對于非整形的字段只能通過表達式將其轉(zhuǎn)換成整數(shù)。
KEY分區(qū):支持除text和BLOB之外的所有數(shù)據(jù)類型的分區(qū),key分區(qū)可以直接基于字段做分區(qū)無需轉(zhuǎn)換成整數(shù)。
說明
1.注意分區(qū)名的大小寫敏感問題,和關(guān)鍵字問題。
2.無論哪種分區(qū)類型,要么分區(qū)表中沒有主鍵或唯一鍵,要么主鍵或唯一鍵包含在分區(qū)列里面,對于存在主鍵或者唯一鍵的表不能使用主鍵或者唯一鍵之外的字段作為分區(qū)字段。
3.5.7以前的版本顯示分區(qū)的執(zhí)行計劃使用:explain PARTITIONS;5.7以后直接執(zhí)行:explain
4.沒有強制要求分區(qū)列非空,建議分區(qū)的列為NOT NULL的列;在RANGE 分區(qū)中如果往分區(qū)列中插入NULL值會被當作最小的值來處理,在LIST分區(qū)中NULL值必須在枚舉列表中否則插入失敗,在HASH/KEY分區(qū)中NULL值會被當作0來處理。
5.基于時間類型的字段的轉(zhuǎn)換函數(shù)mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"
6.拆分合并分區(qū)后會導致修改的分區(qū)的統(tǒng)計信息失效,沒有修改的分區(qū)的統(tǒng)計信息還在,不影響新插入的值加入到統(tǒng)計信息;這時需要對表執(zhí)行Analyze操作.
7.針對非整形字段進行RANG\LIST分區(qū)建議使用COLUMNS分區(qū)。
刪除增加分區(qū)
在每個分區(qū)內(nèi)容介紹中詳細介紹了每種分區(qū)的用法,但是都是介紹在創(chuàng)建表的時候創(chuàng)建分區(qū)和修改刪除分區(qū)單個,也可以在一張已經(jīng)存在的表中加入分區(qū),可以一次性刪除整個表的分區(qū)。
1.移除表的分區(qū)
ALTER TABLE tablename REMOVE PARTITIONING ;
注意:使用remove移除分區(qū)是僅僅移除分區(qū)的定義,并不會刪除數(shù)據(jù)和drop PARTITION不一樣,后者會連同數(shù)據(jù)一起刪除
2.對已經(jīng)存在記錄的表創(chuàng)建分區(qū),以增加range分區(qū)為例,和創(chuàng)建表建分區(qū)的語法一樣。
ALTER TABLE `tb_partition`.`tb_varchar` PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5000), PARTITION part1 VALUES LESS THAN (10000), PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;
注意:對已有的表創(chuàng)建分區(qū)之后,數(shù)據(jù)會按照分區(qū)的定義分布到各個分區(qū)文件當中
總結(jié)
以上就是MySQL的分區(qū)介紹總結(jié)的全部內(nèi)容,希望本文對大家使用mysql的時候有所幫助。
相關(guān)文章
MySQL數(shù)據(jù)庫算術(shù)運算舉例詳解
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫算術(shù)運算的相關(guān)資料,MySQL支持的算術(shù)運算符包括加、減、乘、除和模運算,它們是最常使用、最簡單的一類運算符,需要的朋友可以參考下2024-01-01解決mysql.server?start執(zhí)行報錯ERROR!The?server?quit?without?u
這篇文章主要介紹了解決mysql.server?start執(zhí)行報錯ERROR!The?server?quit?without?updating?PID?file問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09MySQL 8.0.18使用clone plugin重建MGR的實現(xiàn)
這篇文章主要介紹了MySQL 8.0.18使用clone plugin重建MGR的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12MySQL-group-replication 配置步驟(推薦)
下面小編就為大家?guī)硪黄狹ySQL-group-replication 配置步驟(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)
這篇文章主要介紹了mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)的相關(guān)資料,需要的朋友可以參考下2017-11-11