本文为您介绍如何开启自动分区和自动分区的表现形式。
使用效果
PolarDB-X透明分布式的自动分区的工作模式,就是将一个逻辑库内的所有MySQL单表(没有显式使用MySQL分区语法的表),默认按如下方式决定分区方案:
自动使用表的主键(如无显式指定主键,系统会添加默认主键
_drds_implicit_id_
)进行水平分区。表中所有索引都会根据自动分区规则转换为全局索引,并按索引列进行水平分区。
系统自动分区后的默认分区数不支持手动修改。
适用场景
自动分区后,普通索引会转为全局索引,这可能会导致表的写入性能下降(写入操作需要通过分布式事务维护全局索引表与主表的一致性),所以自动分区数据库更适合于对性能要求不高的基于MySQL单机数据库开发的应用(比如,一些新开发且需要快速上线的应用)。通常,这类型的业务的库表数目不多,应用的查询场景相对简单(比如按表主键点查)。
在实际应用的过程中,关于透明分布式的自动分区工作模式的适用场景的细节,可以参考最佳实践。
前提条件
自动分区仅支持AUTO模式数据库,即建库SQL时必须指定
MODE='AUTO'
,示例如下:CREATE DATABASE db_name MODE='AUTO';
AUTO模式数据库默认是手动分区,需手动设置全局如下参数才能使用自动分区:
SET GLOBAL AUTO_PARTITION = true;
示例
创建使用自动分区的数据库
在PolarDB-X中,要使用自动分区的建表模式,可以使用以下的建库SQL:
CREATE DATABASE autodb2 MODE='AUTO';
由于目前AUTO库透明分布式的默认的工作模式是手动分区,还需手动执行以下的全局开关方可打开自动分区功能:
SET GLOBAL AUTO_PARTITION=true;
创建多张MySQL单表并自动分区
执行如下SQL,创建包含主键索引(idx_name
)的表:
CREATE TABLE auto_t1(
id BIGINT NOT NULL auto_increment,
bid INT,
name VARCHAR(30),
birthday datetime,
PRIMARY KEY(id),
INDEX idx_name(name)
);
查看自动分区表的完整建表SQL
SHOW FULL CREATE TABLE auto_t1;
结果如下:
CREATE PARTITION TABLE `auto_t1` (
`id` bigint NOT NULL AUTO_INCREMENT,
`bid` int DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
GLOBAL INDEX /* idx_name_$578c */ `idx_name` (`name`)
PARTITION BY KEY(`name`,`id`)
PARTITIONS 16,
LOCAL KEY `_local_idx_name` (`name`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_0900_ai_ci
PARTITION BY KEY(`id`)
PARTITIONS 16
如上所示,之前的普通索引idx_name
被系统按照自动分区规则转换为了全局索引,并且以主键id
为分区键进行了分区。
该文章对您有帮助吗?
- 本页导读 (1)
- 使用效果
- 适用场景
- 前提条件
- 示例
- 创建使用自动分区的数据库
- 创建多张MySQL单表并自动分区
- 查看自动分区表的完整建表SQL