【笔记】开发指南—透明分布式—聚簇索引

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: PolarDB-X新增支持聚簇索引功能,用于自动维护全局二级索引(GSI)中的覆盖列,保证聚簇索引表和主表的实时同步,所有查询均不用回表,避免因回表带来的额外开销。本文介绍如何创建并使用聚簇索引。

前提条件

PolarDB-X内核小版本需为5.4.9或以上。

注意事项

  • 聚簇索引是一种特殊的全局二级索引,相关行为和限制请参考全局二级索引
  • 聚簇索引的覆盖列默认包含主表的所有列,并在主表的列发生变更时,自动同步修改聚簇索引表,保证聚簇索引表和主表的实时同步。
  • 聚簇索引表也会和主表的本地索引保持同步。

语法

您可以在建表或加索引的语句中,通过CLUSTERED关键字指定创建的索引为聚簇索引。

  • CREATE TABLE:
CREATE [SHADOW] TABLE [IF NOT EXISTS] tbl_name

(create_definition, ...)
[table_options]
[drds_partition_options]
create_definition:
[UNIQUE] CLUSTERED INDEX index_name [index_type] (index_col_name,...)
[drds_partition_options]
[index_option] ...

  • 说明 仅在主键拆分表中可省略拆分规则即[drds_partition_options]部分。
  • CREATE INDEX:
CREATE [UNIQUE]
CLUSTERED INDEX index_name [index_type]
ON tbl_name (index_col_name,...)
[drds_partition_options]
[index_option] ...

  • 说明 仅在主键拆分表中可省略拆分规则即[drds_partition_options]部分。
  • ALTER TABLE:
ALTER TABLE tbl_name
alter_specification
  • 其中alter_specification支持如下规则:
alter_specification:
| ADD [UNIQUE] CLUSTERED {INDEX|KEY} index_name
[index_type] (index_col_name,...)
[drds_partition_options]
[index_option] ...
  • 说明
    • 聚簇索引相关变更(即alter_specification部分)仅支持使用一条变更规则。
    • 聚簇索引必须显式指定索引名。
    • 仅在主键拆分表中可省略拆分规则(即[drds_partition_options]部分)。

使用示例

假设已使用如下语句在PolarDB-X数据库中创建了一张t_order表:


CREATE PARTITION TABLE `t_order` (
-> `t` timestamp null default CURRENT_TIMESTAMP,
-> `x` int default 3,
-> `order_id` varchar(20) DEFAULT NULL,
-> `seller_id` varchar(20) DEFAULT NULL
-> );

您可以使用如下语句为t_order表添加聚簇索引:


CREATE CLUSTERED INDEX `c_i` ON `t_order` (seller_id, x)

添加成功后,您可以使用如下语句查看主表结构,来确认聚簇索引的定义:


SHOW CREATE TABLE t_order;

返回结果如下:


+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_order | CREATE PARTITION TABLE `t_order` (
`t` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`x` int(11) DEFAULT '3',
`order_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
LOCAL KEY `_local_c_i` (`seller_id`, `x`),
CLUSTERED INDEX `c_i`(`seller_id`, `x`) DBPARTITION BY HASH(`seller_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.08 sec)

您还可以通过如下语句查看聚簇索引表结构:


SHOW CREATE TABLE c_i;

从如下返回结果中,可以看到聚簇索引表包含了主表所有的列:


+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| c_i | CREATE TABLE `c_i` (
`t` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`x` int(11) DEFAULT '3',
`order_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
KEY `auto_shard_key_seller_id` USING BTREE (`seller_id`),
KEY `i_seller_id_x` USING BTREE (`seller_id`, `x`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`seller_id`) |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.03 sec)
相关文章
|
SQL 关系型数据库 数据库
【笔记】开发指南—透明分布式—变更表类型及拆分规则
PolarDB-X新增支持变更表的类型(即在单表、拆分表和广播表三者间进行相互转换),和变更拆分表的拆分规则(包括拆分函数或拆分列)。本文介绍相关语法和示例。
198 0
【笔记】开发指南—透明分布式—变更表类型及拆分规则
|
SQL 数据库 索引
开发指南—透明分布式—变更表类型及拆分规则
PolarDB-X新增支持变更表的类型(即在单表、拆分表和广播表三者间进行相互转换),和变更拆分表的拆分规则(包括拆分函数或拆分列)。本文介绍相关语法和示例。
175 0
开发指南—透明分布式—变更表类型及拆分规则
|
SQL 算法 关系型数据库
【笔记】开发指南—透明分布式—主键拆分
PolarDB-X新增按主键类型自动拆分表功能,简易地将分布式技术引入到普通DDL语法,您只需要执行简单的修改,系统将根据主键和索引键自动选择拆分键和拆分方式,完成从单机数据库到分布式数据库的切换。
167 0
|
SQL 数据库 索引
开发指南—透明分布式—变更表类型及拆分规则
PolarDB-X新增支持变更表的类型(即在单表、拆分表和广播表三者间进行相互转换),和变更拆分表的拆分规则(包括拆分函数或拆分列)。本文介绍相关语法和示例。
开发指南—透明分布式—变更表类型及拆分规则
|
数据库 索引
开发指南—透明分布式—聚簇索引
PolarDB-X新增支持聚簇索引功能,用于自动维护全局二级索引(GSI)中的覆盖列,保证聚簇索引表和主表的实时同步,所有查询均不用回表,避免因回表带来的额外开销。本文介绍如何创建并使用聚簇索引。
140 0
|
SQL 算法 数据库连接
开发指南—透明分布式—主键拆分
PolarDB-X新增按主键类型自动拆分表功能,简易地将分布式技术引入到普通DDL语法,您只需要执行简单的修改,系统将根据主键和索引键自动选择拆分键和拆分方式,完成从单机数据库到分布式数据库的切换。
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
215 2
|
2月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
129 6
|
3月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
1月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
107 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)

热门文章

最新文章