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

本文涉及的产品
云原生数据库 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)
相关文章
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
1387 2
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
729 14
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
|
存储 NoSQL 调度
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
SQL 分布式计算 MaxCompute
一种基于ODPS SQL的全局字典索引分布式计算思路
本文提供一种能充分利用分布式计算资源来计算全局字典索引的方法,以解决在大数据量下使用上诉方式导致所有数据被分发到单个reducer进行单机排序带来的性能瓶颈。
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
285 5
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
537 0
|
NoSQL 前端开发 Java
技术笔记:springboot分布式锁组件spring
技术笔记:springboot分布式锁组件spring
249 1
|
达摩院 Java Apache
惊动“达摩院”的分布式架构笔记:火于互联网,据说来自于清华
一个星期前,一本Java架构笔记突然在互联网上爆火。因为内容的深度和广度,甚至连阿里最牛的研发中心都被惊动了,而且作者一周后直接被阿里挖走后定级P8,据说作者来自于清华。