文章目录

  • 第三十三章 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-nameON 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索引。

可能出于以下任一原因希望删除索引:

  • 打算对表执行大量的INSERTUPDATEDELETE操作。可以对操作使用%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相关推荐

  1. 第三十九章 SQL命令 DROP TRIGGER

    文章目录 第三十九章 SQL命令 DROP TRIGGER 大纲 参数 描述 FROM 子句 示例 第三十九章 SQL命令 DROP TRIGGER 删除触发器 大纲 DROP TRIGGER nam ...

  2. 第六章 SQL命令 CREATE INDEX(一)

    文章目录 第六章 SQL命令 CREATE INDEX(一) 大纲 参数 描述 权限与锁 仅支持兼容性选项 索引名称 现有索引 表明 字段名称 嵌入对象中的字段(`%SerialObject`) 索引 ...

  3. 第十三章 SQL命令 CREATE ROLE

    文章目录 第十三章 SQL命令 CREATE ROLE 大纲 参数 描述 权限 示例 第十三章 SQL命令 CREATE ROLE 创建角色 大纲 CREATE ROLE role-name 参数 r ...

  4. 第三章 SQL命令 ALTER USER

    文章目录 第三章 SQL命令 ALTER USER 大纲 参数 描述 权限 示例 第三章 SQL命令 ALTER USER 修改用户密码. 大纲 ALTER USER user-name IDENTI ...

  5. 第十六章 SQL命令 CREATE TABLE(三)

    文章目录 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 NULL和NOT NULL UNIQUE DEFAULT DEFAULT Keywords ON UPDATE Colla ...

  6. 第七十一章 SQL命令 SELECT(三)

    文章目录 第七十一章 SQL命令 SELECT(三) 列别名 字段列别名 Non-Field列别名 FROM子句 表的别名 Sharding Transparent to SELECT Queries ...

  7. 第二十三章 Caché 命令大全 SET 命令

    文章目录 第二十三章 Caché 命令大全 SET 命令 重点 大纲 参数 描述 将多个变量设置为相同的值 设置多个变量的限制 参数 pc variable value JSON值 JSON对象 JS ...

  8. 第四十七章 SQL命令 GRANT(一)

    文章目录 第四十七章 SQL命令 GRANT(一) 大纲 参数 描述 GRANT admin-privilege GRANT role GRANT object-privilege 对象所有者权限 第 ...

  9. 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  10. 第五十六章 SQL命令 INSERT OR UPDATE

    文章目录 第五十六章 SQL命令 INSERT OR UPDATE 大纲 参数 描述 权限 IDKEY字段 计数器字段 Identity和RowID字段 示例 第五十六章 SQL命令 INSERT O ...

最新文章

  1. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
  2. FPGA之道(22)VHDL基本程序框架
  3. 中兴被禁在全球芯片市场掀起的波澜
  4. guido正式发布python年份_Python 基础学习笔记.docx
  5. html5 video修改默认样式,HTML5中将video设置为背景的方法
  6. 数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14
  7. ocs 2007 r2 服务体验
  8. SELinux 基础命令
  9. 值得拥有的手绘风格画图工具
  10. 白话Android音频系统原理
  11. 工业相机与工业镜头相关参数详解
  12. lumion计算机丢失string,Lumion计算机丢失string
  13. 国内十家微交易平台,正规微交易平台排行榜
  14. gitkraken点击Glo出现白屏的情况,回退回去的解决办法
  15. 基于一阶倒立摆系统的模糊神经网络PID控制
  16. TECLAST(台电)双系统板tPAD点评
  17. 打印机无法双面打印处理办法
  18. vue-seamless-scroll数据量少时,暂停滚动,继续滚动
  19. html格式转换word清除格式,Word2010怎么清除格式?word清除格式(图文)教程
  20. Moment js获取今日、昨天、这周、上周、本月、上月方法

热门文章

  1. python实现局域网文件互传_Python+pyftpdlib实现局域网文件互传
  2. 德保罗大学计算机科学专业,德保罗大学专业排名介绍
  3. 概率统计Python计算:双正态总体均值差的单侧区间估计
  4. 一篇基金研报--《外包服务:后安迪-比尔时代IT产业的大餐》
  5. java 百度经纬度 转换为 高德经纬度 谷歌
  6. c语言中judge的用法,judge的用法总结大全
  7. 利用定义求解传递闭包的关系矩阵
  8. 怎么制作gif动态图,静态图片转成动态图的方法分享!
  9. WIN11电脑如何使用IE浏览器进行正常办公操作-以建行网银为例
  10. 利用Matlab App Designer简单设计程序