mysql之分割槽表小結1
同一表的所有分割槽必須使用同一個的儲存引擎
如何禁止分割槽
啟動伺服器時指定—skip-partition,但所有分割槽表都不可訪問
檢視當前是否支援分割槽
mysql> SHOW VARIABLES LIKE '%partition%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| have_partitioning | YES |
+-------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW PLUGINS;
+------------+----------+----------------+---------+---------+
| Name | Status | Type | Library | License |
+------------+----------+----------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ndbcluster | DISABLED | STORAGE ENGINE | NULL | GPL |
+------------+----------+----------------+---------+---------+
11 rows in set (0.00 sec)
Mysql5.5在已有的range/list分割槽上引入新的分割槽型別,分別為range/list columns,主要有兩個改進:
1 支援多列分割槽 2 分割槽列支援非整數型別,包括varchar/char/data/datatime
Range columns
CREATE TABLE rc4 (
a INT,
b INT,
c INT
)
PARTITION BY RANGE COLUMNS(a,b,c) (
PARTITION p0 VALUES LESS THAN (0,25,50),
PARTITION p1 VALUES LESS THAN (10,20,100),
PARTITION p2 VALUES LESS THAN (10,30,50)
PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE)
);
mysql> SELECT (0,25,50) < (10,20,100), (10,20,100) < (10,30,50);
+-------------------------+--------------------------+
| (0,25,50) < (10,20,100) | (10,20,100) < (10,30,50) |
+-------------------------+--------------------------+
| 1 | 1 |
+-------------------------+--------------------------+
1 row in set (0.00 sec)
List columns
CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),
PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),
PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),
PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo')
);
Linear Hash分割槽
除了普通的hash分割槽,mysql還支援linear hash分割槽,兩者區別在於hash演算法,linear hash使用powers-of-two而前者使用modulus,語法上唯一的區別hash前多一個關鍵字linear ;
優勢:增刪/合併/分割分割槽操作速度更快,尤其是TB級別的資料處理;
劣勢:資料分佈相對不會那麼均勻
演算法實現
假定分割槽數目為num,表示式函式為f()
普通hash分割槽:N = MOD(f, num)
Linear hash分割槽:首先計算出V = power(2, ceiling(log(2, num)))和 N = f(column) & (V -1),如果N小於num則將其插入第N個分割槽,否則繼續對N計算 N = num & ceiling(V / 2)
--建立linear hash分割槽表,分割槽數6個
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
PARTITION BY LINEAR HASH( YEAR(col3) )
PARTITIONS 6;
--插入兩條記錄,col3分別為’2003-04-14’和’1998-10-19’,則依照前述計算規則
--‘2003-04-14’
V = power(2, ceiling(log(2, 6))) = 8, N = year(‘2003-04-14’) & (8 – 1) = 2003 & 7 = 3;將其插入第3個分割槽
--‘1998-10-19’
V = 8, N= year(‘1998-10-19’) & (8 – 1) = 1998 & 7 = 6; N = num則繼續計算N = 6 & ceiling(8 / 2) = 6 & 4 = 4;將其插入第4個分割槽
KEY分割槽
與hash分割槽區別在於hash函式由mysql提供:mysql cluster採用MD5(),其他儲存引擎各自使用基於password()d的hash演算法;分割槽列必須為主鍵的一部分,且不侷限於整數型別;支援linear key分割槽;
子分割槽
對於range/list分割槽表,mysql支援包括key/hash在內的子分割槽
如何處理NULL
若分割槽列出現null,則其比任何non-null值都要小;
對於range分割槽表,分割槽列為null的行總是插入第一個分割槽;
對於list分割槽表,除非分割槽list值顯示指定了null,否則插入失敗;
對於hash/key分割槽表,null被當作0處理;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-751622/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql分割槽表小結2MySql
- mysql —— 分表分割槽(1)MySql
- 【MYSQL】 分割槽表MySql
- MySQL 分割槽表MySql
- MySQL分割槽表MySql
- MySQL 分割槽表探索MySql
- mysql 分表 分割槽MySql
- mysql 分割槽表用法MySql
- MySQL表分割槽管理MySql
- 分割槽表總結
- 表分割槽總結
- 分割槽表 總結
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 全面學習分割槽表及分割槽索引(1)索引
- 深入學習分割槽表及分割槽索引(1)索引
- mysql 進行表分割槽MySql
- Mysql表分割槽實現MySql
- mysql分割槽表筆記MySql筆記
- MySQL入門--分割槽表MySql
- MySQL的List分割槽表MySql
- MySQL分割槽表的分割槽原理和優缺點MySql
- 將mysql非分割槽錶轉換為分割槽表MySql
- MySql資料分割槽操作之新增分割槽操作MySql
- oracle 分割槽表總結Oracle
- Oracle 分割槽表 總結Oracle
- MySQL 分割槽表知識整理MySql
- MySQL調優之分割槽表MySql
- mysql的分割槽和分表MySql
- mysql的分割槽與分表MySql
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- [引用分割槽表]Oracle 11g新特性之引用分割槽表Oracle
- mysql表水平拆分和分割槽分表MySql
- 實現MySQL表結構自動分割槽指令碼MySql指令碼
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- oracle分割槽表和分割槽表exchangeOracle
- sql server 小記——分割槽表(上)SQLServer
- 分割槽表、分割槽索引和全域性索引部分總結索引
- oracle分割槽表總結(轉)Oracle