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

简介: 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)
相关文章
|
弹性计算 数据可视化 机器人
基于ECS搭建ROS Kinetic机器人操作系统
将ROS机器人操作系统搭建至云端,实现远程的机器人控制
1056 1
|
存储 Linux Go
基于MinIO搭建高性能文件服务器
基于MinIO搭建高性能文件服务器
1575 0
基于MinIO搭建高性能文件服务器
|
传感器 人工智能 供应链
【AI 场景】如何应用 AI 来优化供应链管理
【5月更文挑战第3天】【AI 场景】如何应用 AI 来优化供应链管理
【AI 场景】如何应用 AI 来优化供应链管理
|
人工智能 算法 开发工具
如何在Mac、Windows和Docker上本地电脑上搭建AI人工智能绘画工具Stable Diffusion
如何在Mac、Windows和Docker上本地电脑上搭建AI人工智能绘画工具Stable Diffusion
|
缓存 Linux 开发工具
centos7.6搭建squid代理服务器
1.squid代理的工作原理 客户机想访问163网站时,首先向代理服务器请求web页面,代理服务器首先会查看自己的缓存,如果缓存中有,则直接发送给客户机,如果缓存表中不存在,他会向inter发送请求,当获得返回web页面后,将数据发送给客户端的同时保存在缓存表中,方便下次使用
784 0
centos7.6搭建squid代理服务器
|
监控 调度 异构计算
阿里云容器服务GPU监控2.0基础篇1:基本功能使用
本系列相关文章:阿里云容器服务GPU监控2.0基础篇1:基本功能使用阿里云容器服务GPU监控2.0基础篇2:监控NVLINK带宽阿里云容器服务GPU监控2.0基础篇3:监控NVIDIA XID错误阿里云容器服务GPU监控2.0进阶篇1:剖析(Profiling)GPU使用情况必备知识阿里云容器服务GPU监控2.0进阶篇2:学会剖析(Profiling)GPU使用情况容器服务GPU监控2.0基于NV
1997 0
阿里云容器服务GPU监控2.0基础篇1:基本功能使用
|
芯片
触发器基础知识(中)
JK触发器是在同步RS触发器的基础上引入两条反馈线构成的。
1805 0
触发器基础知识(中)
|
Java 应用服务中间件 编译器
2022 最新 IntelliJ IDEA 详细配置 Tomcat 8.5 步骤演示(图文版)(二)
2022 最新 IntelliJ IDEA 详细配置 Tomcat 8.5 步骤演示(图文版)
1328 0
2022 最新 IntelliJ IDEA 详细配置 Tomcat 8.5 步骤演示(图文版)(二)
|
机器学习/深度学习 人工智能 自然语言处理
给神经网络加入先验知识!
给神经网络加入先验知识!
|
存储 资源调度 Cloud Native
阿里云跨云迁移工具案例实践:华为云迁移到阿里云
阿里云跨云迁移工具案例实践:华为云迁移到阿里云
阿里云跨云迁移工具案例实践:华为云迁移到阿里云