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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库:分区Partition

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

一、分區(qū):

分區(qū)就是將表的數(shù)據(jù)按照特定規(guī)則存放在不同的區(qū)域,也就是將表的數(shù)據(jù)文件分割成多個小塊,在查詢數(shù)據(jù)的時候,只要知道數(shù)據(jù)數(shù)據(jù)存儲在哪些區(qū)域,然后直接在對應的區(qū)域進行查詢,不需要對表數(shù)據(jù)進行全部的查詢,提高查詢的性能。同時,如果表數(shù)據(jù)特別大,一個磁盤磁盤放不下時,我們也可以將數(shù)據(jù)分配到不同的磁盤去,解決存儲瓶頸的問題,利用多個磁盤,也能夠提高磁盤的IO效率,提高數(shù)據(jù)庫的性能。常見的分區(qū)類型有:Range分區(qū)、List分區(qū)、Hash分區(qū)、Key分區(qū):

  • (1)Range分區(qū):按照連續(xù)的區(qū)間范圍進行分區(qū)
  • (2)List分區(qū):按照給定的集合中的值進行選擇分區(qū)。
  • (3)Hash分區(qū):基于用戶定義的表達式的返回值進行分區(qū),該表達式使用將要插入到表中的這些行的列值進行計算。這個函數(shù)可以包含MySQL中有效的、產(chǎn)生非負整數(shù)值的任何表達式。
  • (4)Key分區(qū):類似于按照HASH分區(qū),區(qū)別在于Key分區(qū)只支持計算一列或多列,且key分區(qū)的哈希函數(shù)是由 MySQL 服務器提供。

1、表分區(qū)的優(yōu)點:

(1)可伸縮性:

  • 將分區(qū)分在不同磁盤,可以解決單磁盤容量瓶頸問題,存儲更多的數(shù)據(jù),也能解決單磁盤的IO瓶頸問題。

(2)提升數(shù)據(jù)庫的性能:

  • 減少數(shù)據(jù)庫檢索時需要遍歷的數(shù)據(jù)量,在查詢時只需要在數(shù)據(jù)對應的分區(qū)進行查詢。
  • 避免Innodb的單個索引的互斥訪問限制
  • 對于聚合函數(shù),例如sum()和count(),可以在每個分區(qū)進行并行處理,最終只需要統(tǒng)計所有分區(qū)得到的結果

(3)方便對數(shù)據(jù)進行運維管理:

  • 方便管理,對于失去保存意義的數(shù)據(jù),通過刪除對應的分區(qū),達到快速刪除的作用。比如刪除某一時間的歷史數(shù)據(jù),直接執(zhí)行truncate,或者直接drop整個分區(qū),這比detele刪除效率更高;
  • 在某些場景下,單個分區(qū)表的備份很恢復會更有效率。

2、表分區(qū)的缺陷:

(1)分區(qū)字段必須放主鍵或者唯一索引中;

(2)每個表最大分區(qū)數(shù)為1024;

3、業(yè)務場景舉例:

(1)項目需要動態(tài)新建、刪除分區(qū)。比如新聞表,按照時月份進行分區(qū),同時為了防止新聞表過大,只保留最近6個月的分區(qū),同時預建后面3個月的分區(qū),這個刪除、預建分區(qū)的過程就是分區(qū)表的動態(tài)管理。

(2)歷史數(shù)據(jù)或不常訪問的數(shù)據(jù)占很大部分,最新或熱點數(shù)據(jù)占的比例不是很大,這時也可以進行表分區(qū)。

4、MySQL分區(qū)類型:

根據(jù)所使用的不同分區(qū)規(guī)則,可以分成幾大分區(qū)類型:??

序號分區(qū)類型說明使用頻率
1RANGE 分區(qū)

按照連續(xù)的區(qū)間范圍進行分區(qū)

較多
2LIST 分區(qū)

按照給定的集合中的值進行選擇分區(qū)

一般
3HASH 分區(qū)

基于用戶定義的表達式的返回值來進行選擇的分區(qū),該表達式使用將要插入到表中的這些行的列值進行計算。這個函數(shù)可以包含MySQL中有效的、產(chǎn)生非負整數(shù)值的任何表達式。

較多
4KEY 分區(qū)

類似于按照HASH分區(qū),除了區(qū)別在于KEY分區(qū)只支持計算一列或多列,且KEY分區(qū)的哈希函數(shù)是由MySQL 服務器提供。

一般

(1)range分區(qū):

每個分區(qū)的值位于一個給定的連續(xù)區(qū)間內(nèi)之內(nèi)。

PARTITION BY RANGE (id) ( ?

? ? ? ? ?PARTITION p0 VALUES LESS THAN (3), ?

? ? ? ? ?PARTITION p1 VALUES LESS THAN (6), ?

? ? ? ? ?PARTITION p2 VALUES LESS THAN (9), ?

? ? ? ? ?PARTITION p3 VALUES LESS THAN (12), ?

? ? ? ? ?PARTITION p4 VALUES LESS THAN MAXVALUE ?

); ?

(2)List分區(qū):

類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進行選擇。

PARTITION BY LIST (province_id) ( ?

? ? ? ? ?PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8), ?

? ? ? ? ?PARTITION p1 VALUES IN (9,10,11,12,16,21), ?

? ? ? ? ?PARTITION p2 VALUES IN (13,14,15,19), ?

? ? ? ? ?PARTITION p3 VALUES IN (17,18,20,22,23,24) ?

?);

?(3)Hash分區(qū):

基于用戶定義的表達式的返回值來進行選擇的分區(qū),該表達式使用將要插入到表中的這些行的列值進行計算。這個函數(shù)可以包含MySQL中有效的、產(chǎn)生非負整數(shù)值的任何表達式。?
HASH分區(qū)主要用來確保數(shù)據(jù)在預先確定數(shù)目的分區(qū)中平均分布。在RANGE和LIST分區(qū)中,必須明確指定一個給定的列值或列值集合應該保存在哪個分區(qū)中。?

create table foo_hash
(empno varchar(20) not null ,
empname varchar(20),
deptno int,
birthdate date not null,
salary int
)
partition by hash(year(birthdate))
partitions 4;

以上創(chuàng)建了4個分區(qū)。

(4)Key分區(qū):

類似于按HASH分區(qū),區(qū)別在于KEY分區(qū)只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數(shù)。必須有一列或多列包含整數(shù)值。

create table foo_key

(empno varchar(20) not null ,

empname varchar(20),

deptno int,

birthdate date not null,

salary int

)

partition by key(birthdate)

partitions 4;

(5)復合分區(qū):

子分區(qū)是針對 RANGE/LIST 類型的分區(qū)表中每個分區(qū)的再次分割。子分區(qū)可以是 HASH/KEY 等類型。

PARTITION BY RANGE (uid) SUBPARTITION BY HASH (uid % 4) SUBPARTITIONS 2(

?????PARTITION p0 VALUES LESS THAN (3000000)

?????DATA DIRECTORY = '/data0/data'

?????INDEX DIRECTORY = '/data1/idx',

?????PARTITION p1 VALUES LESS THAN (6000000)

?????DATA DIRECTORY = '/data2/data'

?????INDEX DIRECTORY = '/data3/idx'

);

以上例子,對 RANGE 分區(qū)再次進行子分區(qū)劃分,子分區(qū)采用 HASH 類型。

?

二、常見分區(qū)操作:

?

總結

以上是生活随笔為你收集整理的MySQL数据库:分区Partition的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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