1. 程式人生 > >mysql分區及分表(二)

mysql分區及分表(二)

存儲、數據管理

mysql分區分表(二)

測試未分區表和分區表性能

重新創建新的測試數據庫及未分區表back1

技術分享

創建分區表back2,按照年月區分

技術分享

maxvalue把對於2005的值全放在p11區裏

創建大點的數據(方便測試的時候區分明顯分區和未分區的區別)

技術分享

rand()函數在01之間產生一個隨機數,如果一個整數參數N指定,它被用作種子值。。每個種子產生的隨機數序列是不同的

執行存儲過程load_part_tabback2中插入數據

技術分享

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分區、表、數據 查看數據會放到那個區裏

技術分享

rangelisthashkey四種分區,分區條件必須整形,不是整形需要通過函數將其轉換

5.columns分區:從5.5開始支持columns分區,可以說是rangelist的進化分區,可以直接使用非整形數據進行分區支持的數據:

所有整形,如INT SMALLINT TINYINT BIGINTFLOATDECIMAL則不支持。
  日期類型,如DATEDATETIME。其余日期類型不支持。
  字符串類型,如CHARVARCHARBINARYVARBINARYBLOBTEXT類型不支持。
COLUMNS可以使用多個列進行分區。


本文出自 “centos7” 博客,請務必保留此出處http://12832314.blog.51cto.com/12822314/1941584

mysql分區及分表(二)