mysql分區及實例演示

1、爲何要分區?

需求:大數據。解決方案:分而治之,更細一點即爲。將大表和大索引分爲一個更小的操做單元
在mysql中,分區容許將表、索引和索引編排表細分爲更小的單元。分區後,每一個分區有本身單獨的名稱。對於DBA來說,這些分區能夠統一管理,也能夠分開管理。
可是對於應用程序來說,分區的表和沒有分區的表示同樣的。換句話來說,分區對於應用是透明的,只是數據庫對於數據的從新整理。
Mysql分區,這個是mysql對於分區的官方解釋。mysql

1.分區的做用

a)提高性能
應該說,幾乎全部分區的目的都是用來提高性能的。不是誰哪天早上吃着雞蛋灌餅,說我們分個區玩玩吧!不是的。那麼分區是如何來提高檢索數據的性能的呢?沒有分區以前,數據每次在查詢和檢索老是面向的是整個數據庫和表。分區以後,mysql針對每一個分區生成特定的數據文件與索引文件。每次只會檢索特定的部分數據,所以能夠更好的來執行和維護數據庫。究其緣由仍是由於在分區以後表指派到不一樣的物理驅動器上,這樣即可在同時訪問多個分區時減小物理 I/O 爭用。
b)易於管理
對於一些無用的冗餘的歷史數據來說,能夠根據分區以後直接刪除相應的分區。操做起來更加簡便,由於執行數以萬計的數據遠比直接刪除文件來的困難的多、時間也更加的長。
c)容錯
分區以後相比分區以前,一張表從以前一個文件分爲如今的三個文件。分區以後即便一個文件出現破壞,也不會影響其餘數據。
2..經常使用分區方法

RANGE分區
LIST分區
HASH分區
KEY分區sql

2、如何分區?數據庫

1.查看數據庫是否支持分區服務器

SHOW VARIABLES LIKE '%partition%';

\

對於mysql來說,現階段支持分區操做的版本有5.1和5.5.如圖顯示爲YES則代表該數據庫支持分區操做。less

2.四種常見分區

Range分區

俗稱:範圍分區。根據表的字段的值,依據給定某段連續的區間來分區。函數

直接建立表時分區性能

create table teacher
(id varchar(20) not null ,
name varchar(20),
age varchar(20),
birthdate date not null,
salary int
)
partition by range(year(birthdate))
(
partition p1 values less than (1970),
partition p2 values less than (1990),
partition p3 values less than maxvalue
);

Ps:建立teacher表,並在建立teacher表同時根據birthdate字段將表劃分爲p一、p二、p3三個分區。大數據

在建立表後分區spa

ALTER TABLE teacher 
partition by range(year(birthdate))
(
partition p1 values less than (1970),
partition p2 values less than (1990),
partition p3 values less than maxvalue
);

Ps:給已經建立了的表分區,分爲p一、p二、p3.索引

LIST分區

俗名:列表分區。其實list分區和range分區應該說都是同樣的,不一樣的是range分區在分區是的依據是一段連續的區間;而list分區針對的分區依據是一組分佈的散列值。

create table student
 (id varchar(20) not null ,
 studentno int(20) not null,
 name varchar(20),
 age varchar(20)
 )
 partition by list(studentno)
 (
 partition p1 values in (1,2,3,4),
 partition p2 values in  (5,6,7,8),
 partition p3 values in (9,10,11)
 );

Ps:如上建立表student,並將student表分爲p一、p二、p3三個分區。須要注意的是通常狀況下,針對表的分區字段爲int等數值類型。

HASH分區

小名:哈希分區。哈希分區主要是依據表的某個字段以及指定分區的數量。

create table user (
  id int(20) not null,
  role varchar(20) not null,
  description varchar(50) 
)
partition by hash(id) 
partitions 10;

Ps:如上建立user表,並將user表平均分爲十個分區。比較有限制的就是須要知道表的數據有多少才能更好平均分配分區。

key分區

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

create table role( id int(20) not null,name varchar(20) not null)
partition by linear key(id)
partitions 10;

3.分區表管理

對指定表添加分區

alter table user add partition(partition p4 values less than MAXVALUE);

刪除指定表指定分區

alter table student drop partition p1;

建立子分區

create table role_subp(id int(20) not null,name int(20) not null)
partition by list(id)
subpartition by hash(name)
subpartitions 3
(
  partition p1 values in(10),
  partition p2 values in(20)
)

複合分區

alter table user
reorganize partition p1,p3 into
(partition p1 values less than (1000));
相關文章
相關標籤/搜索