全部產品
Search
文件中心

:自動分區

更新時間:Mar 27, 2025

本文為您介紹如何開啟自動分區和自動分區的表現形式。

使用效果

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為分區鍵進行了分區。