資料庫的分割槽型別有哪些

2021-12-30 08:07:37 字數 4866 閱讀 6143

分割槽的優點:

1.與單個磁碟或檔案系統分割槽相比,可以儲存更多的資料。

2.對於那些已經失去儲存意義的資料,通常可以通過刪除與那些資料有關的分割槽,很容易地刪除那些資料。相反地,在某些情況下,新增新資料的過程又可以通過為那些新資料專門增加乙個新的分割槽,來很方便地實現。通常和分割槽有關的其他優點包括下面列出的這些。mysql分割槽中的這些功能目前還沒有實現,但是在我們的優先順序列表中,具有高的優先順序;我們希望在5.1的生產版本中,能包括這些功能。

3.一些查詢可以得到極大的優化,這主要是借助於滿足乙個給定where語句的資料可以只儲存在乙個或多個分區內,這樣在查詢時就不用查詢其他剩餘的分割槽。因為分割槽可以在建立了分割槽表後進行修改,所以在第一次配置分割槽方案時還不曾這麼做時,可以重新組織資料,來提高那些常用查詢的效率。

4.涉及到例如sum()和count()這樣聚合函式的查詢,可以很容易地進行並行處理。這種查詢的乙個簡單例子如 「select salesperson_id, count (orders) as order_total from sales group by salesperson_id;」。通過「並行」,這意味著該查詢可以在每個分割槽上同時進行,最終結果只需通過總計所有分割槽得到的結果。

5.通過跨多個磁碟來分散資料查詢,來獲得更大的查詢吞吐量。

分割槽型別:

range分割槽:基於屬於乙個給定連續區間的列值,把多行分配給分割槽

list分割槽:類似於按range分割槽,區別在於list分割槽是基於列值匹配乙個離散值集合中的某個值來進行選擇

hash分割槽:基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算。這個函式可以包含mysql中有效的、產生非負整數值得表示式

key分割槽:類似於按hash分割槽,區別在於key分割槽只支援計算一列或多列,且mysql伺服器提供其自身的雜湊函式。必須有一列或多列包含整數

range分割槽(分割槽是按照順序定義的):

基於屬於乙個給定連續區間的列值,把多行分配給分割槽

這些區間要連續且不能重疊,使用values less than操作符來進行定義

sql**:

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 not null,

store_id int not null

)partition by range (store_id) (

partition p0 values less than (6),

partition p1 values less than (11),

partition p2 values less than (16),

partition p3 values less than (21)

/* partition p3 values less than maxvalue*/

);list分割槽(增刪變得容易)

類似於按range分割槽,區別在於list分割槽是基於列值匹配乙個離散集合中的某個值來進行選擇

list分割槽通過使用" partition by list(expr)" 來實現,其中"expr"是某列值、並返回乙個整數值的表示式,然後通過"valus in(value_list)"的方式來定義每個分割槽,其中"value_list"是乙個通過逗號分隔的整數列表

要按照屬於同乙個地區商店的行儲存在同乙個分割槽中的方式來分割表,可以使用下面的「create table」語句:

sql**:

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 list(store_id)

partition pnorth values in (3,5,6,9,17),

partition peast values in (1,2,10,11,19,20),

partition pwest values in (4,12,13,14,18),

partition pcentral values in (7,8,15,16)

);hash分割槽

基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些列值進行計算。這個函式可以包含mysql 中有效的、產生非負整數值的任何表示式。

要使用hash分割槽來分割乙個表,要在create table 語句上新增乙個「partition by hash (expr)」子句,其中「expr」是乙個返回乙個整數的表示式。它可以僅僅是字段型別為mysql整型的一列的名字。此外,你很可能需要在後面再新增乙個「partitions num」子句,其中num是乙個非負的整數,它表示表將要被分割成分區的數量。

sql**:

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;

如果沒有包括乙個partitions子句,那麼分割槽的數量將預設為1。例外:對於ndb cluster(簇)表,預設的分割槽數量將與簇資料節點的數量相同,這種修正可能是考慮任何max_rows設定,以便確保所有的行都能合適地插入到分割槽中。

liner hash

mysql還支援線性雜湊功能,它與常規雜湊的區別在於,線性雜湊功能使用的乙個線性的2的冪(powers-of-two)運算法則,而常規雜湊使用的是求雜湊函式值的模數。線性雜湊分割槽和常規雜湊分割槽在語法上的唯一區別在於,在「partition by」子句中新增「linear」關鍵字。

sql**:

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 linear hash(year(hired))

partitions 4;

假設乙個表示式expr,當使用線性雜湊功能時,記錄將要儲存到的分割槽是num 個分割槽中的分割槽n,其中n是根據下面的演算法得到: 1. 找到下乙個大於num.的、2的冪,我們把這個值稱為v ,它可以通過下面的公式得到: 2. v = power(2, ceiling(log(2, num))) (例如,假定num是13。那麼log(2,13)就是3.7004397181411。 ceiling(3.7004397181411)就是4,則v = power(2,4), 即等於16)。 3. 設定 n = f(column_list) & (v – 1). 4. 當 n >= num: · 設定 v = ceil(v / 2) · 設定 n = n & (v – 1) 例如,假設表t1,使用線性雜湊分割槽且有4個分割槽,是通過下面的語句建立的: create table t1 (col1 int, col2 char(5), col3 date) partition by linear hash( year(col3) ) partitions 6; 現在假設要插入兩行記錄到表t1中,其中一條記錄col3列值為』2003-04-14′,另一條記錄col3列值為』1998-10-19′。第一條記錄將要儲存到的分割槽確定如下: v = power(2, ceiling(log(2,7))) = 8 n = year(』2003-04-14′) & (8 – 1) = 2003 & 7 = 3 (3 >= 6 為假(false): 記錄將被儲存到#3號分割槽中) 第二條記錄將要儲存到的分割槽序號計算如下: v = 8 n = year(』1998-10-19′) & (8-1) = 1998 & 7 = 6 (6 >= 4 為真(true): 還需要附加的步驟) n = 6 & ceiling(5 / 2) = 6 & 3 = 2 (2 >= 4 為假(false): 記錄將被儲存到#2分割槽中) 按照線性雜湊分割槽的優點在於增加、刪除、合併和拆分分割槽將變得更加快捷,有利於處理含有極其大量(1000吉)資料的表。它的缺點在於,與使用常規hash分割槽得到的資料分布相比,各個分區間資料的分布不大可能均衡。

key分割槽

類似於按hash分割槽,區別在於key分割槽只支援計算一列或多列,且mysql伺服器提供其自身的雜湊函式。必須有一列或多列包含整數值。

sql**:

create table tk (

col1 int not null,

col2 char(5),

col3 date

)partition by linear key (col1)

partitions 3;

在key分割槽中使用關鍵字linear和在hash分割槽中使用具有同樣的作用,分割槽的編號是通過2的冪(powers-of-two)演算法得到,而不是通過模數演算法。

常用的資料庫備份型別有哪些?

對資料庫的備份是 管理人員的必修課,那麼常用的資料庫備份方式有哪些呢?應如何選擇?資料庫備份有四種型別,分別應用於不同的場合,下面簡要介紹一下。1 完全備份 這是大多數人常用的方式,它可以備份整個資料庫,包含使用者表 系統表 索引 檢視和儲存過程等所有資料庫物件。但它需要花費更多的時間和空間,所以,...

常用的資料庫備份型別有哪些?

對資料庫的備份是 管理人員的必修課,那麼常用的資料庫備份方式有哪些呢?應如何選擇?資料庫備份有四種型別,分別應用於不同的場合,下面簡要介紹一下。1 完全備份 這是大多數人常用的方式,它可以備份整個資料庫,包含使用者表 系統表 索引 檢視和儲存過程等所有資料庫物件。但它需要花費更多的時間和空間,所以,...

mysql資料庫 資料分割槽的型別

mysql資料庫 資料分割槽的型別 range分割槽 基於屬於乙個給定連續區間的列值,把多行分配給分割槽。mysql5.5之前的版本只接收int型別的引數 舉例如下 create table employees id int not null,fname varchar 30 lname varch...