ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB ALTER INDEX语句

YashanDB ALTER INDEX语句

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-08-14 17:37:12 0 删除 编辑

通用描述

ALTER INDEX用于修改索引的相关信息。

一个SQL命令行可以指定多项修改操作,以 ,分开;但对于存在分区索引的表,该表上的索引操作需单项执行,即不能放在同一个命令行中,且对于分区索引,其修改操作必须按指定分区进行,而不能针对整体索引操作。

#语句定义

alter index::=

代码
syntax::= ALTER INDEX [schema"."] index_name (INITRANS integer|VISIBLE|INVISIBLE|UNUSABLE|COALESCE|NOPARALLEL|PARALLEL integer|NOLOGGING|LOGGING |modify_partition|mod

modify_partition::=

代码
syntax::= MODIFY PARTITION partition_name (INITRANS integer|UNUSABLE|COALESCE)

modify_subpartition::=

语法图
代码
syntax::= MODIFY SUBPARTITION subpartition_name (UNUSABLE|COALESCE)

rebuild_clause::=

语法图
代码
syntax::= REBUILD [(PARTITION partition_name)|(SUBPARTITION subpartition_name)|(NOREVERSE|REVERSE)] [(TABLESPACE tablespace_name|INITRANS integer|PCTFREE integer|ONLINE|

代码
syntax::= RECLAIM SEGMENT [PARTITION partition_name] TABLESPACE tablespace_name  [OBJNO_REUSE object_id SEG_FILE file_id SEG_BLOCK block_id]

initrans

该语句用于修改索引的数据块(Data Block)里事务(Transaction)表的初始大小设置,修改成功后该索引后续增加的数据块将按照此值设置事务表初始大小。

示例(HEAP表、TAC表)

ALTER INDEX idx_sales_info_1 INITRANS 4;
Copied!

#visible|invisible

该语句用于设置索引对优化器(Optimizer)是否可见,即在执行SQL查询时优化器是否会考虑使用该索引。

示例(HEAP表、TAC表)

ALTER INDEX idx_sales_info_1 INVISIBLE;
 ALTER INDEX idx_sales_info_1 VISIBLE;
Copied!

#unusable

该语句用于设置索引为不可用状态,之后对表操作不会触发该索引更新,因此如需要恢复该索引可用,则必须进行索引 重建(REBUILD)。

示例(HEAP表、TAC表)

ALTER INDEX idx_sales_info_1 UNUSABLE;
Copied!

#coalesce

该语句用于重组索引,RTREE索引无法重组。

对于分区索引,只可对实际分配了空间的分区进行重组。

当BTree索引(尤其是单调递增索引)使用一段时间后,整个BTree上可能会出现大量的空页和稀疏页,造成空间浪费,为解决这一问题,YashanDB提供索引coalesce功能,包括对空页的回收及稀疏页的合并,但此功能并不会使BTree的树高度变低。

重组操作会对索引产生结构性变更,且会对索引基表加表级共享锁,因此建议在没有业务或者业务量很低时执行本操作。

示例(HEAP表、单机TAC表)

ALTER INDEX idx_finance_info_1 COALESCE;
Copied!

#noparallel|parallel

该语句用于语法兼容,无实际含义。

#nocompress|compress

该语句用于语法兼容,无实际含义。

#logging|nologging

该语句用于语法兼容,无实际含义。

#modify_partition

该语句用于对索引的分区进行INITRANS/UNUSABLE/COALESCE等修改操作,对于分区索引,必须通过本语句进行指定的分区索引修改。

示例

--通过系统视图查看分区索引信息SELECT index_name,partition_name,statusFROM USER_IND_PARTITIONSWHERE index_name='IDX_SALES_INFO_1';INDEX_NAME             PARTITION_NAME         STATUS---------------------- ---------------------- ---------IDX_SALES_INFO_1       IP_SALES_INFO_1        N/A
IDX_SALES_INFO_1       IP_SALES_INFO_2        N/A
IDX_SALES_INFO_1       IP_SALES_INFO_3        N/A   
--对指定分区索引进行修改ALTER INDEX idx_sales_info_1 MODIFY PARTITION ip_sales_info_1 UNUSABLE;
Copied!

#modify_subpartition

该语句用于对索引的二级分区进行INITRANS/UNUSABLE/COALESCE等修改操作,对于组合分区索引,必须通过本语句进行指定的二级分区索引修改。

示例

--对指定二级分区索引进行修改ALTER INDEX idx_sales_info_1 MODIFY SUBPARTITION isp_sales_info_11 UNUSABLE;ALTER INDEX idx_sales_info_1 MODIFY SUBPARTITION isp_sales_info_21 COALESCE;
Copied!

#rebuild_clause

该语句用于对索引或者索引分区进行重建操作。

当索引使用了一段时间后,可能存在空间膨胀或占用空间过多的问题,此时可以通过rebuild功能进行重建,生成新的紧凑的BTree。此外,通过指定TABLESPACE参数,重建索引也可以实现索引表空间搬迁。

对于被设置UNUSABLE的索引,重建后该索引将恢复为有效状态。

对于分区索引的REBUILD操作,需在每个分区上单独执行。一级分区索引只能REBUILD PARTITION,二级分区索引只能REBUILD SUBPARTITION。

本操作过程中将会在索引基表上加排他锁,但在指定了ONLINE时,本操作不会阻塞并发的DML操作。

重建索引的使用限制同 创建索引。

#partition

该语句用于重建索引的指定分区。

partition_name

指定需重建的索引分区的名称,必须为已存在的分区。

#subpartition

该语句用于重建索引的指定二级分区。

subpartition_name

指定需重建的索引二级分区的名称,必须为已存在的二级分区。

示例(HEAP表,单机TAC表,单机LSC表)

ALTER INDEX idx_sales_info_1 REBUILD SUBPARTITION isp_sales_info_11;
Copied!

#noreverse|reverse

重建索引为反向或非反向,使用限制同 CREATE INDEX。

示例(HEAP表,单机TAC表)

ALTER INDEX idx_finance_info_1 REBUILD REVERSE;ALTER INDEX idx_finance_info_1 REBUILD NOREVERSE;
Copied!

#tablespace

重建索引或索引分区到指定的表空间。

重建分布表上的索引或索引分区时,不能指定表空间。

#initrans

为重建的索引或索引分区指定INITRANS值。

#pctfree

为重建的索引或索引分区指定PCTFREE值。

#online

该语句用于指定重建索引过程中是否允许并发DML操作,省略则默认不允许,使用限制同 CREATE INDEX。

示例(单机HEAP表、单机TAC表)

ALTER INDEX idx_finance_info_1 REBUILD TABLESPACE yashan INITRANS 3 PCTFREE 10 ONLINE;
Copied!

#nocompress|compress

该语句用于语法兼容,无实际含义。

#nologging|logging

该语句用于语法兼容,无实际含义。

#noparallel|parallel

设置重建索引的并行度,NOPARALLEL表示不并行,使用限制同 CREATE INDEX。

integer

并行度值,取值范围为[1,服务器CPU核数*2],可省略,省略则默认按CPU核数的并行度并发创建索引。

示例(HEAP表、单机TAC表)

ALTER INDEX idx_finance_info_1 REBUILD PARALLEL 2;
Copied!

#rename to new_name

该语句用于指定修改索引的名称。

指定的新名称不能为空且必须符合YashanDB的 对象命名规范。

示例

ALTER INDEX idx_sales_info_1 RENAME TO idx_sales_info_2;
Copied!

#reclaim_index_clause

该语句用于在表空间迁移后,为迁移的对象声明存储对象。

Warn:

通常用于在分布式部署中进行节点/节点组扩缩容后,将逻辑对象与物理存储对象进行关联。

在该场景下,数据库会自动生成reclaim语句并自动在目标节点执行。 不建议用户手动执行该语句,若不避免可能会导致系统崩溃或其他不可预知的结果。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3093488/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639762