人大金仓数据库解决了兼容oracle的索引失效问题

关键字

索引失效,禁用索引,启用索引,索引重建、人大金仓、

问题描述

Oracle能够通过语句设置,使索引失效,支持设置索引的启用禁用操作

create table t1(c1 int,c2 varchar(10));

create index idx_t1 on t1(c1);

--禁用索引,设置索引失效

alter index idx_t1 unusable;

--启用索引,重建索引

alter index idx_t1 rebuild;

问题分析

KES不具备设置索引启用,禁用的能力。

解决方案

create index语句添加usable、unusable支持创建索引时指定索引状态,未指定时默认为启用状态。

新增语法:

CREATE UNIQUE INDEX CONCURRENTLY \[ IF NOT EXISTS name ]

ON ONLY table_name USING method

( { column_name | ( expression ) } COLLATE collation

opclass ASC \| DESC NULLS { FIRST \| LAST } , ... )

INCLUDE ( column_name \[, ...\] )

WITH ( storage_parameter = value \[, ... \] )

TABLESPACE tablespace_name

UNUSABLE \| USABLE

WHERE predicate

描述:

unusable 创建一个不可用状态的索引

usable 创建一个可用状态的索引,默认状态

ALTER INDEX name UNUSABLE

ALTER INDEX name REBUILD

--create index使用

create table tab_btree (id int,name text);

insert into tab_btree values(generate_series(1,100000),md5(random()::text));

create index i_btree on tab_btree using btree(id);

analyze;

explain (costs off) select * from tab_btree where id < 10;

-- alter index name unusable

alter index i_btree unusable;

explain (costs off) select * from tab_btree where id < 10;

-- alter index name rebuild

alter index i_btree rebuild;

explain (costs off) select * from tab_btree where id < 10;

参考资料

相关推荐
掉头发的王富贵7 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils8 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
Databend1 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
倔强的石头_5 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_7 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab8 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm