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 ); |
更多詳細資訊請登入【瀚高技術支援平臺】檢視