MySQL分區(qū)分表(二)
創(chuàng)新互聯(lián)專注于臨江網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供臨江營銷型網站建設,臨江網站制作、臨江網頁設計、臨江網站官網定制、成都微信小程序服務,打造臨江網絡公司原創(chuàng)品牌,更為您提供臨江網站排名全網營銷落地服務。
測試未分區(qū)表和分區(qū)表性能
重新創(chuàng)建新的測試數(shù)據(jù)庫及未分區(qū)表back1
創(chuàng)建分區(qū)表back2,按照年月區(qū)分
maxvalue把對于2005的值全放在p11區(qū)里
創(chuàng)建大點的數(shù)據(jù)(方便測試的時候區(qū)分明顯分區(qū)和未分區(qū)的區(qū)別)
rand()函數(shù)在0和1之間產生一個隨機數(shù),如果一個整數(shù)參數(shù)N指定,它被用作種子值。。每個種子產生的隨機數(shù)序列是不同的
執(zhí)行存儲過程load_part_tab向back2中插入數(shù)據(jù)
向back1中插入數(shù)據(jù)
測試未分區(qū)和分區(qū)的性能
可以通過explain語句分析執(zhí)行情況
創(chuàng)建索引測試效果
重啟mysqld服務 可以看出時間相差不大,如果數(shù)據(jù)大會明顯
mysql分區(qū)類型
1.range分區(qū):基于屬于一個給定連續(xù)區(qū)間的列值,把多行給分區(qū),區(qū)間連續(xù)不能相互重疊;使用values less than定義
創(chuàng)建新的表表名為benet1
2.list分區(qū):類似于range分區(qū),區(qū)別在于基本列值是離散值集合
list分區(qū)通過使用partition by list來實現(xiàn)
這個可以在表中添加或刪除指定地方的記錄容易
3.hash分區(qū):允許dba通過對表的一個或多個列的hash key進行計算,最后通過hash碼不同數(shù)值對應的數(shù)據(jù)區(qū)域進行分區(qū)
使用hash算法分了四個區(qū)
創(chuàng)建數(shù)據(jù)并且查看數(shù)據(jù)放在那個分區(qū)里
查看分區(qū)的詳細信息
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
可以看到第三個分區(qū)p2中有一個數(shù)據(jù)記錄
4.key分區(qū):key分區(qū)使用mysql數(shù)據(jù)庫提供的函數(shù)進行分區(qū),ndb cluster使用md5函數(shù)分區(qū),對于其他存儲引擎mysql內部的hash函數(shù)
創(chuàng)建key分區(qū)、表、數(shù)據(jù) 查看數(shù)據(jù)會放到那個區(qū)里
range、list、hash、key四種分區(qū),分區(qū)條件必須×××,不是×××需要通過函數(shù)將其轉換
5.columns分區(qū):從5.5開始支持columns分區(qū),可以說是range和list的進化分區(qū),可以直接使用非×××數(shù)據(jù)進行分區(qū)支持的數(shù)據(jù):
所有×××,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
日期類型,如DATE和DATETIME。其余日期類型不支持。
字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
COLUMNS可以使用多個列進行分區(qū)。