mysql分區及分表(二)
mysql分區分表(二)
測試未分區表和分區表性能
重新創建新的測試數據庫及未分區表back1
創建分區表back2,按照年月區分
maxvalue把對於2005的值全放在p11區裏
創建大點的數據(方便測試的時候區分明顯分區和未分區的區別)
rand()函數在0和1之間產生一個隨機數,如果一個整數參數N指定,它被用作種子值。。每個種子產生的隨機數序列是不同的
執行存儲過程load_part_tab向back2中插入數據
向back1中插入數據
測試未分區和分區的性能
可以通過explain語句分析執行情況
創建索引測試效果
重啟mysqld服務 可以看出時間相差不大,如果數據大會明顯
mysql分區類型
1.range分區:基於屬於一個給定連續區間的列值,把多行給分區,區間連續不能相互重疊;使用values less than定義
創建新的表表名為benet1
2.list分區:類似於range分區,區別在於基本列值是離散值集合
list分區通過使用partition by list來實現
這個可以在表中添加或刪除指定地方的記錄容易
3.hash分區:允許dba通過對表的一個或多個列的hash key進行計算,最後通過hash碼不同數值對應的數據區域進行分區
使用hash算法分了四個區
創建數據並且查看數據放在那個分區裏
查看分區的詳細信息
mysql> select * from information_schema.partitions where table_schema=‘test1‘ and table_name=‘benet3‘\G;
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test1
TABLE_NAME: benet3
PARTITION_NAME: p0
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 1
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: HASH
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: year(b)
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 0
AVG_ROW_LENGTH: 0
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: 2017-06-22 18:01:56
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
*************************** 2. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test1
TABLE_NAME: benet3
PARTITION_NAME: p1
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 2
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: HASH
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: year(b)
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 0
AVG_ROW_LENGTH: 0
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: 2017-06-22 18:01:56
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
*************************** 3. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test1
TABLE_NAME: benet3
PARTITION_NAME: p2
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 3
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: HASH
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: year(b)
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 1
AVG_ROW_LENGTH: 16384
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: 2017-06-22 18:01:56
UPDATE_TIME: 2017-06-22 18:02:57
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
*************************** 4. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test1
TABLE_NAME: benet3
PARTITION_NAME: p3
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: 4
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: HASH
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: year(b)
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 0
AVG_ROW_LENGTH: 0
DATA_LENGTH: 16384
MAX_DATA_LENGTH: NULL
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: 2017-06-22 18:01:56
UPDATE_TIME: 2017-06-22 18:02:57
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP: default
TABLESPACE_NAME: NULL
4 rows in set (0.00 sec)
ERROR:
No query specified
可以看到第三個分區p2中有一個數據記錄
4.key分區:key分區使用mysql數據庫提供的函數進行分區,ndb cluster使用md5函數分區,對於其他存儲引擎mysql內部的hash函數
創建key分區、表、數據 查看數據會放到那個區裏
range、list、hash、key四種分區,分區條件必須整形,不是整形需要通過函數將其轉換
5.columns分區:從5.5開始支持columns分區,可以說是range和list的進化分區,可以直接使用非整形數據進行分區支持的數據:
所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
日期類型,如DATE和DATETIME。其余日期類型不支持。
字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
COLUMNS可以使用多個列進行分區。
本文出自 “centos7” 博客,請務必保留此出處http://12832314.blog.51cto.com/12822314/1941584
mysql分區及分表(二)