第三十三章 SQL命令 DROP INDEX
文章目录
- 第三十三章 SQL命令 DROP INDEX
- 大纲
- 参数
- 描述
- 权限与锁
- 索引名称
- 表名
- 不存在的索引
- 表名
- 示例
第三十三章 SQL命令 DROP INDEX
删除索引。
大纲
DROP INDEX index-name [ON [TABLE] table-name]DROP INDEX table-name.index-name
参数
index-name
- 要删除的索引的名称。Index-name
是名称的SQL版本,可以包括下划线和其他标点符号。它作为SQL映射名称列在表的Management Portal SQL Catalog Details
中。ON table-name
或ON TABLE table-name
- 可选-与索引关联的表的名称。可以使用任一语法指定表名:第一个语法使用ON
子句;TABLE
关键字是可选的。第二个语法使用限定名称语法schema-name.table-name.index-name
。表名可以是限定的(schema.table
),也可以是非限定的(Table
)。未限定的表名采用缺省模式名。如果完全省略表名, IRIS将删除找到的第一个与index-name
匹配的索引,如下所述。
描述
DROP INDEX
语句从表定义中删除索引。可以使用DROP INDEX
删除标准索引、位图索引或位片索引。通过删除相应的唯一索引,可以使用DROP INDEX
删除唯一约束或主键约束。不能使用DROP INDEX
删除位图范围索引或主地图(数据/主)IDKEY
索引。
可能出于以下任一原因希望删除索引:
- 打算对表执行大量的
INSERT
、UPDATE
或DELETE
操作。可以对操作使用%noindex
选项,而不是接受让这些操作中的每个操作都写入索引的性能开销。或者,在某些情况下,可能更可取的做法是删除索引,对数据库执行批量更改,然后重新创建索引并填充它。 - 不用于查询操作的字段或字段组合存在索引。在这种情况下,维护索引的性能开销可能不值得。
- 现在包含大量重复数据的字段或字段组合存在索引。在这种情况下,查询性能的最小收益可能不值得。
如果表中有数据,则不能删除IDKEY索引。尝试这样做会生成SQLCODE-325
错误。
权限与锁
DROP INDEX
命令是特权操作。用户必须具有%ALTER_TABLE
管理权限才能执行DROP INDEX
。否则将导致%msg
用户‘name’
没有%ALTER_TABLE
权限的SQLCODE-99
错误。如果拥有适当的授予权限,则可以使用GRANT
命令将%ALTER_TABLE
权限分配给用户或角色。管理权限是特定于命名空间的。
用户必须对指定表拥有%ALTER
特权。如果用户是表的所有者(创建者),则会自动授予该用户对该表的%ALTER
权限。否则,必须授予用户对该表的%ALTER
特权。否则将导致SQLCODE-99
错误,因为%msg
用户‘name’
没有更改‘Schema.TableName’
的表定义所需的%ALTER
特权。可以通过调用%CHECKPRIV
命令来确定当前用户是否具有%ALTER
特权。可以使用GRANT
命令将%ALTER
权限分配给指定表。
- 不能对从持久类投影的表使用
DROP INDEX
,除非表类定义包括[DdlAllowed]
。否则,操作将失败,并出现SQLCODE-300
错误,同时未为类‘Schema.tablename’
启用%msg DDL
。 DROP INDEX
不能用于从部署的持久类投射的表。此操作失败,并出现SQLCODE-400
错误,并显示%msg Unable to Execute DDL
以修改已部署的类:‘classname’
。
DROP INDEX
语句获取对table-name
的表级锁。这可以防止其他进程修改表的数据。此锁在DROP INDEX
操作结束时自动释放。
索引名称
当指定索引名来创建索引时,系统会通过剔除所有标点符号来生成相应的类索引名;它会将在类中指定的索引名保留为索引的SqlName
值(SQL映射名称)。指定要删除索引的索引名时,需要指定包含标点符号的名称,标点符号将作为SQL映射名称在表的管理门户SQL目录详细资料中列出。例如,为唯一约束(MyTable_UNIQUE2
)指定生成的SQL映射名称,而不是为索引名称(MYTABLEUNIQUE2
)指定。此索引名称不区分大小写。
表名
可以使用DROP INDEX
语法FORM
指定与索引关联的表:
INDEX
-NAME ON TABLE
语法:指定表名称是可选的。如果省略, IRIS将在命名空间中的所有类中搜索相应的索引。Table-name.index-name
语法:需要指定表名。
在这两种语法中,表名可以是非限定的(Table
),也可以是限定的(schema.table
)。如果省略架构名称,则使用默认架构名称。
如果DROP INDEX
没有指定表名, IRIS会在所有索引中搜索与索引名匹配的索引名SqlName
,或者与索引名匹配的索引名SqlName
,以查找没有为索引指定SQlname
的索引。如果IRIS在任何类中都找不到匹配的索引,就会产生一个SQLCODE -333
错误,表明不存在这样的索引。如果 IRIS找到多个匹配的索引,DROP INDEX
无法确定要删除哪个索引;它会发出SQLCODE -334
错误:“索引名称不明确。在多个表中找到索引。IRIS中的索引名称在每个命名空间中不是唯一的。
不存在的索引
默认情况下,如果尝试删除不存在的索引,DROP INDEX
会默认发出SQLCODE-333
错误。要确定当前设置,请调用$SYSTEM.SQL.CurrentSettings()
,它显示一个允许DDL
丢弃不存在的索引设置。默认值为0(“否”)。这是推荐的设置。如果设置为1(“是”),则不存在索引的DROP INDEX
不执行任何操作,也不发出错误消息。
在管理门户、系统管理、配置、SQL和对象设置中,通过选中忽略冗余DDL语句复选框,可以在系统范围内设置此选项(以及其他类似的创建、更改和删除选项)。
表名
如果指定可选的table-name
,则它必须与现有表相对应。
- 如果指定的表名不存在, IRIS将发出
SQLCODE-30
错误,并将%msg
设置为表‘SQLUser.tname’
不存在。 - 如果指定的表名称存在,但没有名为
index-name
的索引, IRIS将发出SQLCODE-333
错误,并将%msg
设置为尝试删除表SQLUSER.TNAME
上的索引‘MyIndex’
-未找到索引。 - 如果指定的表名是视图, IRIS将发出
SQLCODE-333
错误,并将%msg
设置为尝试删除视图SQLUSER.VNAME
上的索引‘EmpSalaryIndex’
失败。索引仅支持表,不支持视图。
示例
第一个示例创建名为Employee
的表,本节的所有示例都使用该表。
下面的嵌入式SQL示例创建一个名为“EmpSalaryIndex”
的索引,然后删除它。
注意,这里DROP INDEX
没有指定与索引关联的表;
它假设“EmpSalaryIndex”
是这个名称空间中的唯一索引名称。
ClassMethod DropIndex()
{&sql(CREATE TABLE Employee (EMPNUM INT NOT NULL,NAMELAST CHAR(30) NOT NULL,NAMEFIRST CHAR(30) NOT NULL,STARTDATE TIMESTAMP,SALARY MONEY,ACCRUEDVACATION INT,ACCRUEDSICKLEAVE INT,CONSTRAINT EMPLOYEEPK PRIMARY KEY (EMPNUM)))w !,"SQLCODE = ",SQLCODE," 创建表"&sql(CREATE INDEX EmpSalaryIndexON TABLE Employee(Namelast,Salary))w !,"SQLCODE=",SQLCODE," 创建索引"n SQLCODE ,%msg&sql(DROP INDEX EmpSalaryIndex)w !,"SQLCODE=",SQLCODE," 删除索引"if (SQLCODE '=0 ) { w !,"message",%msg}
}
下面的嵌入式SQL示例使用ON table
子句指定与要删除的索引相关联的表:
/// d ##class(PHA.TEST.SQLCommand).DropIndex1()
ClassMethod DropIndex1()
{&sql(CREATE INDEX EmpVacaIndexON TABLE Employee(NameLast,AccruedVacation))w !,"SQLCODE=",SQLCODE," 创建索引"&sql(DROP INDEX EmpVacaIndex ON TABLE Employee)w !,"SQLCODE=",SQLCODE," 删除索引"
}
下面的嵌入式SQL示例使用限定名语法指定了与要删除的索引相关联的表:
ClassMethod DropIndex2()
{&sql(CREATE INDEX EmpSickIndexON TABLE Employee(NameLast,AccruedSickLeave))w !,"SQLCODE=",SQLCODE," 创建索引"&sql(DROP INDEX Employee.EmpSickIndex)w !,"SQLCODE=",SQLCODE," 删除索引"
}
下面的命令删除一个不存在的索引。
它生成SQLCODE -333
错误:
DROP INDEX PeopleIndex ON TABLE Employee
第三十三章 SQL命令 DROP INDEX相关推荐
- 第三十九章 SQL命令 DROP TRIGGER
文章目录 第三十九章 SQL命令 DROP TRIGGER 大纲 参数 描述 FROM 子句 示例 第三十九章 SQL命令 DROP TRIGGER 删除触发器 大纲 DROP TRIGGER nam ...
- 第六章 SQL命令 CREATE INDEX(一)
文章目录 第六章 SQL命令 CREATE INDEX(一) 大纲 参数 描述 权限与锁 仅支持兼容性选项 索引名称 现有索引 表明 字段名称 嵌入对象中的字段(`%SerialObject`) 索引 ...
- 第十三章 SQL命令 CREATE ROLE
文章目录 第十三章 SQL命令 CREATE ROLE 大纲 参数 描述 权限 示例 第十三章 SQL命令 CREATE ROLE 创建角色 大纲 CREATE ROLE role-name 参数 r ...
- 第三章 SQL命令 ALTER USER
文章目录 第三章 SQL命令 ALTER USER 大纲 参数 描述 权限 示例 第三章 SQL命令 ALTER USER 修改用户密码. 大纲 ALTER USER user-name IDENTI ...
- 第十六章 SQL命令 CREATE TABLE(三)
文章目录 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 NULL和NOT NULL UNIQUE DEFAULT DEFAULT Keywords ON UPDATE Colla ...
- 第七十一章 SQL命令 SELECT(三)
文章目录 第七十一章 SQL命令 SELECT(三) 列别名 字段列别名 Non-Field列别名 FROM子句 表的别名 Sharding Transparent to SELECT Queries ...
- 第二十三章 Caché 命令大全 SET 命令
文章目录 第二十三章 Caché 命令大全 SET 命令 重点 大纲 参数 描述 将多个变量设置为相同的值 设置多个变量的限制 参数 pc variable value JSON值 JSON对象 JS ...
- 第四十七章 SQL命令 GRANT(一)
文章目录 第四十七章 SQL命令 GRANT(一) 大纲 参数 描述 GRANT admin-privilege GRANT role GRANT object-privilege 对象所有者权限 第 ...
- 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 第五十六章 SQL命令 INSERT OR UPDATE
文章目录 第五十六章 SQL命令 INSERT OR UPDATE 大纲 参数 描述 权限 IDKEY字段 计数器字段 Identity和RowID字段 示例 第五十六章 SQL命令 INSERT O ...
最新文章
- R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
- FPGA之道(22)VHDL基本程序框架
- 中兴被禁在全球芯片市场掀起的波澜
- guido正式发布python年份_Python 基础学习笔记.docx
- html5 video修改默认样式,HTML5中将video设置为背景的方法
- 数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14
- ocs 2007 r2 服务体验
- SELinux 基础命令
- 值得拥有的手绘风格画图工具
- 白话Android音频系统原理
- 工业相机与工业镜头相关参数详解
- lumion计算机丢失string,Lumion计算机丢失string
- 国内十家微交易平台,正规微交易平台排行榜
- gitkraken点击Glo出现白屏的情况,回退回去的解决办法
- 基于一阶倒立摆系统的模糊神经网络PID控制
- TECLAST(台电)双系统板tPAD点评
- 打印机无法双面打印处理办法
- vue-seamless-scroll数据量少时,暂停滚动,继续滚动
- html格式转换word清除格式,Word2010怎么清除格式?word清除格式(图文)教程
- Moment js获取今日、昨天、这周、上周、本月、上月方法
热门文章
- python实现局域网文件互传_Python+pyftpdlib实现局域网文件互传
- 德保罗大学计算机科学专业,德保罗大学专业排名介绍
- 概率统计Python计算:双正态总体均值差的单侧区间估计
- 一篇基金研报--《外包服务:后安迪-比尔时代IT产业的大餐》
- java 百度经纬度 转换为 高德经纬度 谷歌
- c语言中judge的用法,judge的用法总结大全
- 利用定义求解传递闭包的关系矩阵
- 怎么制作gif动态图,静态图片转成动态图的方法分享!
- WIN11电脑如何使用IE浏览器进行正常办公操作-以建行网银为例
- 利用Matlab App Designer简单设计程序