Mysql 分割槽介紹 一 概述

2021-09-03 09:30:27 字數 4213 閱讀 6305

通過範圍的方式進行分割槽, 為每個分割槽給出一定的範圍, 範圍必須是連續的並且不能重複, 使用values less than操作符

啥意思呢? 就是range型別就是一種範圍, 比如, 從1-10, 11-20, 21-30這種的方式分割槽, 1-10就在乙個分割槽裡, 11-20是另外乙個分割槽, 但是看起來他們還是同乙個表

咱們看乙個建立的例子

create table `t1` (

`id` int(11) not null,

`uid` int(11) not null comment '使用者id',

`score` int(3) not null default '0' comment '分數',

primary key (`id`,`score`)

) engine=innodb default charset=utf8

partition by range (score)

(partition p0 values less than (10) engine = innodb,

partition p1 values less than (20) engine = innodb,

partition p2 values less than (30) engine = innodb,

partition p3 values less than (40) engine = innodb)

建立了個t1表, 並且t1有四個分割槽, 第乙個分割槽p0的範圍是小於10的, 第二個是小於20的。這就是乙個range分割槽的例子。

那為啥主鍵定義的是雙主鍵呢?因為分割槽鍵(score) 必須也是主鍵或者唯一鍵的一部分。

range分割槽的詳細介紹請看mysql 分割槽介紹(二) —— range分割槽

list不同於range分割槽, 每個分割槽必須被顯式的定義, 每個分割槽是根據列值的成員在一組列表中的元素定義的

這說的有點亂, 還是直接看乙個建立的例子吧

create table t2 (

id int not null,

uid int not null comment '使用者id',

score int(3) not null default 0 comment '分數',

primary key(id, uid)

)partition by list(uid) (

partition p0 values in (1,3,5,7,9),

partition p1 values in (2,4,6,8,10)

)

t2的分割槽鍵是uid, 有兩個分割槽(這個很明顯嘛), 如果uid in (1,3,5,7,9), 那麼這條資料就會儲存在p0中, 如果是2,4,6,8,10的話, 就會在p1中, 這就是list 分割槽

range分割槽的詳細介紹請看mysql 分割槽介紹(三) —— list分割槽

columns和以上兩種是很不一樣的, 這個是可以用多個分割槽鍵確定分割槽的。有兩種方式, range columns 和 list columns

1. range columns 分割槽

類似range 分割槽, 但是可以使用乙個或多個字段值定義

不太好理解... 還是看例子吧

create table t3 (

a int,

b int,

c char(3),

d int

)partition by range columns(a,d,c) (

partition p0 values less than (5,10,'ggg'),

partition p1 values less than (10,20,'mmm'),

partition p2 values less than (15,30,'sss')

)

分割槽鍵有多個, 並且都是範圍的, 就是range columns 分割槽

range columns分割槽的詳細介紹請看mysql 分割槽介紹(四) —— range columns分割槽

2. list columns 分割槽

mysql 5.6開始支援list columns分割槽, 可以開始使用多個列作為分割槽的鍵, 並且列的資料型別除了數字型別可以作為分割槽列; 你也可以使用字串型別, date和datetime

還是看例子吧

create table customers_1 (

first_name varchar(25),

last_name varchar(25),

street_1 varchar(30),

street_2 varchar(30),

city varchar(15),

renewal date

)partition by list columns(city) (

partition pregion_1 values in('oskarshamn', 'högsby', 'mönsterås'),

partition pregion_2 values in('vimmerby', 'hultsfred', 'västervik'),

partition pregion_3 values in('nässjö', 'eksjö', 'vetlanda'),

partition pregion_4 values in('uppvidinge', 'alvesta', 'växjo')

);

list columns分割槽的詳細介紹請看mysql 分割槽介紹(五) —— list columns分割槽

使用分割槽鍵去確保資料可以均勻的分布在乙個預先確定數字的分割槽上, 在hash分割槽中, 無需顯式的指定分割槽

create table employees (

id int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01',

separated date not null default '9999-12-31',

job_code int,

store_id int

)partition by hash(store_id)

partitions 4;

hash分割槽的詳細介紹請看mysql 分割槽介紹(六) —— hash分割槽

key分割槽類似hash分割槽, 接受0個或多個列名, key分割槽的雜湊函式由mysql伺服器提供。ndb集群使用md5();使用其他儲存引擎的表,伺服器採用自己的內部的雜湊函式是基於相同的演算法password()。

create table k1 (

id int not null primary key,

name varchar(20)

)partition by key()

partitions 2;

key分割槽的詳細介紹請看mysql 分割槽介紹(七) —— key分割槽

子分割槽也稱為復合分割槽, 在分割槽的基礎上進一步進行分割槽的方式

create table ts (

id int, purchased date

)partition by range( year(purchased) )

subpartition by hash( to_days(purchased) )

subpartitions 2 (

partition p0 values less than (1990),

partition p1 values less than (2000),

partition p2 values less than maxvalue

);

子分割槽的詳細介紹請看mysql 分割槽介紹(八) —— 子分割槽

mysql集群 (一)概述

集群 cluster 技術是指一組相互犭蟲立的計算機,利用高速通訊網路組成乙個計算機系統,每個群集節點 即集群中的每台計算機 都是可以自主執行的乙個犭蟲立伺服器。這些伺服器可以彼此通訊,對網路客戶機來說就像是形成了乙個單一系統,協同起來向使用者提 用程式 系統資源和資料,並以單一系統的模式加以管理。...

MySQL基礎 一 概述

一 概述 1 db database 資料庫,儲存資料的容器 2 dbms database management system 資料庫管理系統,又稱為資料庫軟體或資料庫產品,用於建立或管理db,常見的資料庫管理系統 mysql oracle db2 sqlserver等 3 sql structu...

MySQL優化(一) 概述

2.在硬體級別進行優化 3.平衡可移植性和效能 資料庫效能取決於資料庫級別的多個因素,例如表,查詢和配置設定。這些軟體構造導致硬體級別的cpu和i o操作,必須盡可能地最小化並盡可能高效。使資料庫應用程式快速執行的最重要因素是其基本設計 結構合理嗎?特別是,列是否具有正確的資料型別,並且每個表是否具...