一、背景
mysql 表中已有 4 億數據,為提高查詢效率,需創建分區,一開始計划是創建 HASH 分區,結果報錯:
ERROR 1659 (HY000): Field 'partno' is of a not allowed type for this type of partitioning
1
mysql 表中已有 4 億數據,為提高查詢效率,需創建分區,一開始計划是創建 HASH 分區,結果報錯:
ERROR 1659 (HY000): Field 'partno' is of a not allowed type for this type of partitioning
1
查詢得知報錯原因,HASH 分區只支持數字分區,而我要分區的字段是 varchar 類型,故改用 KEY 分區
二、解決
二、解決
KEY 分區語句:
alter table TABLENAME PARTITION BY key(COLUMN) PARTITIONS NUM;
1
TABLENAME :表名
COLUMN:列名
NUM:分區數量
1
TABLENAME :表名
COLUMN:列名
NUM:分區數量
檢查分區是否創建成功
EXPLAIN PARTITIONS SELECT * FROM `cars`
1
若成功,結果如下:
1
若成功,結果如下:
踩坑
拿小表測試 100 個分區發現,分區不均勻,一半分區有數據,一半沒有數據,網上查詢得知:key 分區,只有指定分區數目為質數,才能保證每個分區都有數據。
小表測試分區 97 個,分布均勻。
小表測試分區 97 個,分布均勻。
KEY 分區和 HASH 分區的區別
KEY 分區和 HASH 分區相似,但是 KEY 分區支持除 text 和 BLOB 之外的所有數據類型的分區,而 HASH 分區只支持數字分區,KEY 分區不允許使用用戶自定義的表達式進行分區,KEY 分區使用系統提供的 HASH 函數進行分區。
當表中存在主鍵或者唯一鍵時,如果創建 key 分區時沒有指定字段系統默認會首選主鍵列作為分區字列,如果不存在主鍵列會選擇非空唯一鍵列作為分區列,注意唯一列作為分區列唯一列不能為null。
當表中存在主鍵或者唯一鍵時,如果創建 key 分區時沒有指定字段系統默認會首選主鍵列作為分區字列,如果不存在主鍵列會選擇非空唯一鍵列作為分區列,注意唯一列作為分區列唯一列不能為null。
查看已分區表的詳情
SELECT *
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'TABLE_NAME';
123
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'TABLE_NAME';
123
參考文章:
https://blog.csdn.net/echo_hello_world/article/details/80693224
https://bbs.csdn.net/topics/390857704
https://blog.csdn.net/jhq0113/article/details/44593511
原文鏈接:https://blog.csdn.net/weixin_41287692/article/details/83652085
https://blog.csdn.net/echo_hello_world/article/details/80693224
https://bbs.csdn.net/topics/390857704
https://blog.csdn.net/jhq0113/article/details/44593511
原文鏈接:https://blog.csdn.net/weixin_41287692/article/details/83652085