1. 程式人生 > 資料庫 >MySQL與瀚高資料庫的範圍分割槽的語法及例項(APP)

MySQL與瀚高資料庫的範圍分割槽的語法及例項(APP)

目錄

環境

文件用途

詳細資訊

環境

系統平臺:Microsoft Windows (64-bit) 10

版本:5.6.4

文件用途

當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。
表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料分類存放到多個表空間的物理檔案上,

這樣查詢資料時,不至於每次都掃描整張表。

分割槽型別分為範圍分割槽(range partition)、列表分割槽(list partition)、雜湊分割槽(hash partition)等。

本次主要介紹MySQL和瀚高資料庫的範圍分割槽。

MySQL的範圍分割槽:

含義:基於屬於一個給定連續區間的列值,把多行分配給分割槽。主鍵、約束、索引在分割槽表中建立。

關鍵字:RANGE、VALUES LESS THAN

RANGE又可分為原生RANGE和RANGE COLUMNS。

1) 對於原生RANGE分割槽,分割槽欄位必須是整型或者轉換為整型,如果分割槽欄位是日期型別的欄位,那麼就必須將日期型別的欄位轉換成整型型別。對於日期型別的轉換,優化器只支援year(),to_days,to_seconds,unix_timestamp()函式的轉換,其他的並不支援,也就是說,在按日期欄位分割槽的時候,如果不是使用上述幾個函式轉換的,查詢優化器將無法對相關查詢進行優化。

2) 對於RANGE COLUMNS分割槽,不可以使用表示式,只能使用列名;接受一個或多個欄位的列表;分割槽列是不限制於數字列的;字串、DATE和DATETIME列也可以使用在分割槽列。

注:分割槽欄位必須包含在主鍵內

語法:

原生RANGE分割槽語法:

CREATE TABLE table_name(column_name data_type)

PARTITION BY RANGE(整型column_list|整型轉換函式(column_list)) (

    PARTITION partition_name VALUES LESS THAN (value_list)[,

    PARTITION partition_name VALUES LESS THAN (value_list)][,

    ...]

)

column_list:

    column_name[, column_name][, ...]

value_list:

    value[, value][, ...]

column_list是一個或多個列名, value_list是和column_list相對應的一個或多個值

RANGE COLUMNS分割槽語法:

CREATE TABLE table_name(column_name data_type)

PARTITION BY RANGE COLUMNS(column_list) (

    PARTITION partition_name VALUES LESS THAN (value_list)[,

    PARTITION partition_name VALUES LESS THAN (value_list)][,

    ...]

)

column_list:

    column_name[, column_name][, ...]

value_list:

    value[, value][, ...]

column_list是一個或多個列名, value_list是和column_list相對應的一個或多個值

注:在value_list中有一個最大值MAXVALUE,可以建立MAXVALUE的分割槽,儲存超出範圍的資料

刪除分割槽語法:

ALTER TABLE table_name DROP PARTITION partition_name;

 

瀚高資料庫的範圍分割槽:

含義:支援單列、多列分割槽,例如:RANGE(x,y)

關鍵字:RANGE、FOR VALUES FROM(……) TO(……)

注:主鍵、約束、索引等不能在分割槽表中建立,目前只能在各個分割槽中建立。分割槽表只是一個表結構。

語法:

-- 主表

CREATE TABLE table_name ( column_name data_type )

    PARTITION BY RANGE ( { column_name } [, ... ] )

 

-- 子表

CREATE TABLE table_name

    PARTITION OF parent_table

FOR VALUES

    FROM ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )

      TO ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )

注:MINVALUE是最小值,MAXVALUE是最大值,為了防止插入範圍以外的資料時報錯,可以建立兩個分割槽,

分別是MINVALUE和MAXVALUE的分割槽。分割槽欄位的值不能為NULL。

刪除分割槽語法:

-- 把分割槽修改成普通表

ALTER TABLE table_name DETACH PARTITION partition_name;

-- 刪除分割槽

DROP TABLE partition_name;

 

詳細資訊

下面通過例項進行詳細說明:

MySQL的範圍分割槽例項:

測試環境:Win10+MySQL5.7

1. 原生RANGE分割槽例項

1) 使用整型欄位score作為分割槽key

create table student(

           sid integer auto_increment,

           sname varchar(20),

           score integer,

           birthday DATETIME,

           ssex varchar(10),

           primary key(sid,score)  -- score是分割槽欄位,必須作為主鍵

       )

partition by range(score)(

           partition p0 values less than(10),-- 分割槽p0

           partition p1 values less than(20),-- 分割槽p1

           partition p2 values less than(30),-- 分割槽p2

           partition p3 values less than(40),-- 分割槽p3

           partition p4 values less than(50),-- 分割槽p4

           partition p5 values less than(60),-- 分割槽p5

           partition p6 values less than(70),-- 分割槽p6

           partition p7 values less than(80) -- 分割槽p7

);

更多詳細資訊請登入【瀚高技術支援平臺】檢視