mysql分割槽及例項演示

2021-09-08 19:17:22 字數 3425 閱讀 8832

需求:大資料。解決方案:分而治之,更細一點即為。將大表和大索引分為乙個更小的操作單元

在mysql中,分割槽允許將表、索引和索引編排表細分為更小的單元。分割槽後,每個分割槽有自己單獨的名稱。對於dba來講,這些分割槽可以統一管理,也可以分開管理。

但是對於應用程式來講,分割槽的表和沒有分割槽的表示一樣的。換句話來講,分割槽對於應用是透明的,只是資料庫對於資料的重新整理。

mysql分割槽,這個是mysql對於分割槽的官方解釋。

a)提公升效能

應該說,幾乎所有分割槽的目的都是用來提公升效能的。不是誰哪天早上吃著雞蛋灌餅,說咱們分個區玩玩吧!不是的。那麼分割槽是如何來提公升檢索資料的效能的呢?沒有分割槽之前,資料每次在查詢和檢索總是面向的是整個資料庫和表。分割槽之後,mysql針對每個分割槽生成特定的資料檔案與索引檔案。每次只會檢索特定的部分資料,因此可以更好的來執行和維護資料庫。究其原因還是因為在分割槽之後表指派到不同的物理驅動器上,這樣便可在同時訪問多個分割槽時減少物理 i/o 爭用。

b)易於管理

對於一些無用的冗餘的歷史資料來講,可以根據分割槽之後直接刪除相應的分割槽。操作起來更加簡便,因為執行數以萬計的資料遠比直接刪除檔案來的困難的多、時間也更加的長。

c)容錯

分割槽之後相比分割槽之前,一張表從之前乙個檔案分為現在的三個檔案。分割槽之後即使乙個檔案出現破壞,也不會影響其他資料。

2..常用分割槽方法

range分割槽

list分割槽

hash分割槽

key分割槽

二、如何分割槽?

1.檢視資料庫是否支援分割槽

對於mysql來講,現階段支援分割槽操作的版本有5.1和5.5.如圖顯示為yes則表明該資料庫支援分割槽操作。

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

直接建立表時分區

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欄位將表劃分為p1、p2、p3三個分割槽。

在建立表後分割槽

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:給已經建立了的表分割槽,分為p1、p2、p3.

俗名:列表分割槽。其實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表分為p1、p2、p3三個分割槽。需要注意的是一般情況下,針對表的分割槽欄位為int等數值型別。

小名:雜湊分割槽。雜湊分割槽主要是依據表的某個字段以及指定分割槽的數量。

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表平均分為十個分割槽。比較有限制的就是需要知道表的資料有多少才能更好平均分配分割槽。

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

create table role( id int(20) not null,name varchar(20) not null)

partition by linear key(id)

partitions 10;

對指定表新增分割槽

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));

mysql游標例項演示

剛接觸mysql游標的朋友們可能一時半會兒無法理解mysql游標是什麼,游標怎麼用,這邊拿了乙個簡單的mysql游標例項來演示給大家,或許大家看了就能馬上理解什麼是游標,一般什麼情況下使用游標.整體感覺游標用得相對來說比較少,平時也感覺不出它有什麼作用,現在也是朦朦朧的概念吧。談談我對他的理解吧。游...

mysql游標例項演示

剛接觸mysql游標的朋友們可能一時半會兒無法理解mysql游標是什麼,游標怎麼用,這邊拿了乙個簡單的mysql游標例項來演示給大家,或許大家看了就能馬上理解什麼是游標,一般什麼情況下使用游標.整體感覺游標用得相對來說比較少,平時也感覺不出它有什麼作用,現在也是朦朦朧的概念吧。談談我對他的理解吧。游...

例項演示hive的靜態分割槽和動態分割槽

分割槽主要用於提高效能 分割槽列的值將表劃分為乙個個的資料夾 查詢時語法使用 分割槽 列和常規列類似 查詢時hive會只從指定分割槽查詢資料,提高查詢效率 注 由於hive實際是儲存在hdfs上的抽象,hive的乙個分割槽名對應乙個目錄名,子分割槽名就是子目錄名,並不是乙個實際字段。所以可以這樣理解...