达梦数据库屏蔽关键字

1.找到dm.ini文件

# ps -ef|grep dm

在这里插入图片描述

2.修改该目录下的这个文件

EXCLUDE_RESERVED_WORDS上加上要过滤的关键字[versions]
在这里插入图片描述

3.重启达梦服务

# systemctlrestart DmServiceDM.service
第1章结构化查询语言DM_SQL简介 ................................................................................................. 1 1.1 DM_SQL语言的特点 ................................................................................................................. 1 1.2 保留字与标识符 ........................................................................................................................ 2 1.3 DM_SQL语言的功能及语句 ..................................................................................................... 2 1.4 DM_SQL所支持的数据类型 ..................................................................................................... 3 1.4.1 常规数据类型 .................................................................................................................... 3 1.4.2 日期时间数据类型 ............................................................................................................ 6 1.4.3 多媒体数据类型 ................................................................................................................ 9 1.4.4 数据类型别名 .................................................................................................................... 9 1.5 DM_SQL语言支持的表达式 ..................................................................................................... 9 1.5.1 数值表达式 ...................................................................................................................... 10 1.5.2 字符串表达式 .................................................................................................................. 11 1.5.3 时间值表达式 .................................................................................................................. 12 1.5.4 时间间隔值表达式 .......................................................................................................... 13 1.5.5 运算符的优先级 .............................................................................................................. 14 1.6 DM_SQL语言支持的数据库模式 ........................................................................................... 15 第2章本手册中的实例说明 ............................................................................................................... 16 2.1 实例库说明 .............................................................................................................................. 16 2.2 参考脚本 ................................................................................................................................. 24 第3章数据定义语句 ........................................................................................................................... 42 3.1 数据库定义语句 ...................................................................................................................... 42 3.2 数据库修改语句 ...................................................................................................................... 44 3.3 数据库删除语句 ...................................................................................................................... 46 3.4 设置当前数据库语句 .............................................................................................................. 46 3.5 登录定义语句 .......................................................................................................................... 47 3.6 登录修改语句 .......................................................................................................................... 51 3.7 登录删除语句 .......................................................................................................................... 53 3.8 用户定义语句 .......................................................................................................................... 53 3.9 用户修改语句 .......................................................................................................................... 54 3.10 用户删除语句 ........................................................................................................................ 54 3.11 模式定义语句 ........................................................................................................................ 55 3.12 设置当前模式语句 ................................................................................................................ 56 3.13 模式删除语句 ........................................................................................................................ 57 3.14 基表定义语句 ........................................................................................................................ 57 3.15 基表修改语句 ........................................................................................................................ 68 3.16 基表删除语句 ..................................................................................................................... 74 3.17 全表删除语句 ........................................................................................................................ 75 3.18 索引定义语句 ........................................................................................................................ 76 3.19 索引删除语句 ........................................................................................................................ 78 3.20 序列定义语句 ........................................................................................................................ 79 3.21 序列删除语句 ........................................................................................................................ 80 3.22 全文索引定义语句 ................................................................................................................ 81 3.23 全文索引修改语句 ................................................................................................................ 81 3.24 全文索引删除语句 ................................................................................................................ 82 II 3.25 数据库快照定义语句 ............................................................................................................ 83 3.26 数据库快照删除语句 ............................................................................................................ 84 第4章数据查询语句和全文检索语句 ............................................................................................... 85 4.1 单表查询 ................................................................................................................................. 91 4.1.1 简单查询 .......................................................................................................................... 91 4.1.2 带条件查询 ...................................................................................................................... 92 4.1.3 集函数 .............................................................................................................................. 94 4.1.4 情况表达式 ...................................................................................................................... 96 4.2 连接查询 ................................................................................................................................. 98 4.3 子查询 ................................................................................................................................... 105 4.3.1 标量子查询 .................................................................................................................... 106 4.3.2 表子查询 ........................................................................................................................ 107 4.3.3 派生表子查询 ................................................................................................................ 109 4.3.4 定量比较 ........................................................................................................................ 110 4.3.5 带EXISTS谓词的子查询 ............................................................................................... 111 4.3.6 多列表子查询 ................................................................................................................ 112 4.4 查询结果的合并 .....................................................................................................................113 4.5 GROUP BY和HAVING子句 ...................................................................................................114 4.5.1 GROUP BY子句的使用 ................................................................................................. 114 4.5.2 HAVING子句的使用 ...................................................................................................... 115 4.6 ORDER BY子句 ......................................................................................................................116 4.7 选取前几条数据 .....................................................................................................................117 4.8 选取其中几条数据 .................................................................................................................117 4.9 全文检索 ................................................................................................................................118 4.10 层次查询 .............................................................................................................................. 120 4.10.1 层次查询子句 .............................................................................................................. 120 4.10.2 层次查询相关伪列 ...................................................................................................... 121 4.10.3 层次查询相关操作符 .................................................................................................. 121 4.10.4 层次查询相关函数 ...................................................................................................... 121 4.11 查看执行计划 ...................................................................................................................... 125 第5章数据的插入、删除和修改 ..................................................................................................... 126 5.1 数据插入语句 ........................................................................................................................ 126 5.2 数据修改语句 ........................................................................................................................ 129 5.3 数据删除语句 ........................................................................................................................ 130 5.4 伪列的使用 ............................................................................................................................ 131 5.4.1 ROWID ........................................................................................................................... 131 5.4.2 UID和USER .................................................................................................................... 132 5.4.3 ROWNUM ...................................................................................................................... 132 5.5 DM自增列的使用 ................................................................................................................... 132 5.5.1 DM自增列定义 ............................................................................................................... 132 5.5.2 SET IDENTITY_INSERT 属性 ..................................................................................... 133 第6章视图 ........................................................................................................................................ 136 6.1 视图的作用 .......................................................................................................................... 136 6.2 视图的定义 ............................................................................................................................ 137 6.3 视图的删除 ............................................................................................................................ 139 6.4 视图的查询 ............................................................................................................................ 140 III 6.5 视图数据的更新 .................................................................................................................... 141 第7章嵌入式SQL ............................................................................................................................. 143 7.1 SQL前缀和终结符 ................................................................................................................. 143 7.2 宿主变量 ............................................................................................................................... 143 7.2.1 输入和输出变量 ............................................................................................................ 144 7.2.2 指示符变量 .................................................................................................................... 145 7.3 服务器登录与退出 ................................................................................................................ 145 7.3.1 登录服务器 .................................................................................................................... 145 7.3.2 退出服务器 .................................................................................................................... 146 7.4 游标的定义与操纵 ................................................................................................................ 146 7.4.1 定义游标语句 ................................................................................................................ 147 7.4.2 打开游标语句 ................................................................................................................ 147 7.4.3 拨动游标语句 ................................................................................................................ 148 7.4.4 关闭游标语句 ................................................................................................................ 150 7.4.5 关于可更新游标 ............................................................................................................ 150 7.4.6 游标定位删除语句 ........................................................................................................ 150 7.4.7 游标定位修改语句 ........................................................................................................ 151 7.5 单元组查询语句 .................................................................................................................... 152 7.6 动态SQL ............................................................................................................................... 153 7.6.1 EXECUTE IMMEDIATE立即执行语句 ........................................................................ 154 7.6.2 PREPARE准备语句 ........................................................................................................ 155 7.6.3 EXCUTE执行语句 ......................................................................................................... 155 7.7 异常处理 ............................................................................................................................... 156 第8章函数 ........................................................................................................................................ 157 8.1 数值函数 ............................................................................................................................... 166 8.2 字符串函数 ............................................................................................................................ 173 8.3 日期时间函数 ........................................................................................................................ 184 8.4 空值判断函数 ........................................................................................................................ 193 8.5 类型转换函数 ........................................................................................................................ 194 8.6 杂类函数 ............................................................................................................................... 195 8.7 系统函数 ............................................................................................................................... 196 8.8 存储加密函数 ........................................................................................................................ 215 8.9 标记处理函数 ........................................................................................................................ 222 8.10 备份恢复函数 ...................................................................................................................... 223 8.11 附加分离数据库 .................................................................................................................. 230 第9章一致性和并发性 ..................................................................................................................... 233 9.1 DM事务相关语句 ................................................................................................................... 233 9.1.1 事务的开始 .................................................................................................................... 233 9.1.2 事务的结束 .................................................................................................................... 233 9.1.3 保存点相关语句 ............................................................................................................ 234 9.1.4 设置事务隔离级及读写特性 ........................................................................................ 235 9.2 DM手动上锁语句 ................................................................................................................... 236 第10章存储模块 ............................................................................................................................... 238 10.1 存储模块的定义 .................................................................................................................. 238 10.2 存储模块的删除 .................................................................................................................. 246 10.3 存储模块的控制语句 .......................................................................................................... 247 IV 10.3.1 语句块 .......................................................................................................................... 247 10.3.2 赋值语句 ...................................................................................................................... 249 10.3.3 条件语句 ...................................................................................................................... 249 10.3.4 循环语句 ...................................................................................................................... 250 10.3.5 EXIT语句 ...................................................................................................................... 252 10.3.6 调用语句 ...................................................................................................................... 253 10.3.7 RETURN语句 ............................................................................................................... 255 10.3.8 NULL语句 .................................................................................................................... 255 10.3.9 GOTO语句 .................................................................................................................... 255 10.3.10 RAISE语句 ................................................................................................................. 256 10.3.11 打印语句 .................................................................................................................... 256 10.4 存储模块的异常处理 .......................................................................................................... 256 10.4.1 异常变量的说明 .......................................................................................................... 257 10.4.2 异常的抛出 .................................................................................................................. 257 10.4.3 异常处理器 .................................................................................................................. 257 10.4.4 异常处理用法举例 ...................................................................................................... 257 10.5 存储模块的SQL语句 .......................................................................................................... 259 10.5.1 游标 .............................................................................................................................. 259 10.5.2 动态SQL ...................................................................................................................... 260 10.5.3 游标变量 ...................................................................................................................... 261 10.5.4 返回查询结果集 .......................................................................................................... 261 10.5.5 SQL语句应用举例 ........................................................................................................ 261 10.6 客户端存储模块 .................................................................................................................. 264 10.7 子过程、子函数 .................................................................................................................. 265 10.7.1 子过程 .......................................................................................................................... 265 10.7.2 子函数 .......................................................................................................................... 266 10.8 %TYPE、%ROWTYPE ....................................................................................................... 266 10.8.1 %TYPE .......................................................................................................................... 266 10.8.2 %ROWTYPE ................................................................................................................ 267 10.9 记录类型 .............................................................................................................................. 267 10.9.1 记录类型定义 .............................................................................................................. 267 10.9.2 记录赋值 ...................................................................................................................... 268 第11章触发器 .................................................................................................................................. 270 11.1 触发器的定义 ...................................................................................................................... 270 11.1.1 触发器类型 .................................................................................................................. 277 11.1.2 触发器激发顺序 .......................................................................................................... 279 11.1.3 新、旧行值的引用 ...................................................................................................... 280 11.1.4 触发器谓词 .................................................................................................................. 281 11.1.5 变异表 .......................................................................................................................... 282 11.1.6 设计触发器的原则 ...................................................................................................... 283 11.2 触发器的删除 ...................................................................................................................... 284 11.3 禁止和允许触发器 .............................................................................................................. 284 11.4 触发器应用举例 .................................................................................................................. 286 11.4.1 使用触发器实现审计功能 .......................................................................................... 286 11.4.2 使用触发器维护数据完整性 ...................................................................................... 286 11.4.3 使用触发器保障数据安全性 ...................................................................................... 287 V 11.4.4 使用触发器派生字段值 .............................................................................................. 288 第12章DM安全管理 ..................................................................................................................... 289 12.1 创建角色语句 ...................................................................................................................... 289 12.2 删除角色语句 ...................................................................................................................... 290 12.3 授权语句(数据库权限) ....................................................................................................... 290 12.4 授权语句(对象权限) ........................................................................................................... 291 12.5 授权语句(角色权限) ........................................................................................................... 295 12.6 回收权限语句(数据库权限) ............................................................................................... 295 12.7 回收权限语句(对象权限) ................................................................................................... 297 12.8 回收权限语句(角色权限) ................................................................................................... 299 12.9 策略与标记管理 .................................................................................................................. 300 12.9.1 创建策略 ...................................................................................................................... 300 12.9.2 修改策略 ...................................................................................................................... 300 12.9.3 删除策略 ...................................................................................................................... 302 12.9.4 安全标记 ...................................................................................................................... 302 12.9.5 用户标记设置语句 ...................................................................................................... 303 12.9.6 表标记设置语句 .......................................................................................................... 306 12.10 审计设置语句 .................................................................................................................... 308 12.11 审计取消语句 .................................................................................................................... 312 12.12 审计信息查阅语句 ............................................................................................................ 314 12.13 审计分析 ............................................................................................................................ 314 12.13.1 创建审计分析规则 .................................................................................................... 314 12.13.2 删除审计分析规则 .................................................................................................... 316 12.14加密引擎 ............................................................................................................................. 316 12.14.1 创建加密引擎 ............................................................................................................ 316 12.14.2 修改加密引擎 ............................................................................................................ 317 12.14.3 删除加密引擎 ............................................................................................................ 320 第13章外部链接 ............................................................................................................................... 321 13.1 创建外部链接 ...................................................................................................................... 321 13.2 删除外部链接 ...................................................................................................................... 322 13.3 使用外部连接进行远程对象操作 ...................................................................................... 322 第14章DM备份还原 ......................................................................................................................... 324 14.1 备份数据库 .......................................................................................................................... 324 14.2 还原数据库 .......................................................................................................................... 325 第15章包 ......................................................................................................................................... 327 15.1 创建包 ................................................................................................................................. 327 15.1.1 创建包规范 .................................................................................................................. 327 15.1.2 创建包主体 .................................................................................................................. 327 15.2 删除包 ................................................................................................................................. 328 15.2.1 删除包规范 .................................................................................................................. 328 15.2.2 删除包主体 .................................................................................................................. 329 15.3 应用实例 .............................................................................................................................. 329 第16章同义词 .................................................................................................................................. 332 16.1 创建同义词 .......................................................................................................................... 332 16.2 删除同义词 .......................................................................................................................... 332 附录1 关键字和保留字 ...................................................................................................................... 334 VI 附录2 SQL语法描述说明 ................................................................................................................... 338 附录3 SQL命令参考 ........................................................................................................................... 341 附录4系统存储过程和函数 ............................................................................................................... 343 附录5 DM技术支持 ............................................................................................................................ 387
<think>嗯,用户的问题是关于达梦数据库中IN关键字导致索引失效的原因及解决方法。这个问题很具体,说明用户可能在实际开发或优化中遇到了性能瓶颈。 从引用内容来看,达梦数据库的索引机制和MySQL类似,都是基于B+树结构。引用[1]特别强调了索引的物理独立性和排序特性,这为理解索引失效提供了理论基础。用户提到的IN关键字失效问题,在关系型数据库中其实是个经典场景。 用户可能正在调试一个慢查询,发现加了IN条件后执行计划全表扫描了。ta的困惑点应该在于:明明字段有索引,为什么用IN就不走索引?这背后涉及几个技术点: 首先是索引选择性的问题。当IN的取值列表过大时,优化器可能判断全表扫描比多次索引查找更高效。引用[2]提到达梦使用双引号作为关键字标识,这个细节提示我们要注意SQL语句的语法规范。 其次是统计信息准确性的影响。如果表数据分布统计不及时,优化器无法正确评估索引效率。引用[4]展示的执行计划暗示用户可能需要分析具体查询的explain结果。 用户没有说明IN列表的具体规模,这很关键。如果是少量固定值(比如状态枚举),失效概率较低;但如果是动态生成的子查询结果集,就需要特别注意。ta可能还忽略了NULL值处理的问题——达梦对NULL的索引处理方式会影响IN的性能表现。 解决方案方面,除了常规的重写查询、拆分语句外,引用[3]提到的长度参数(LENGTH_IN_CHAR)提醒我注意字符类型索引的特殊性。对于超长列表,或许可以建议用户尝试临时表方案,这在达梦的归并连接(引用[4])中可能有奇效。 用户应该具备一定数据库基础,但可能不熟悉达梦特有的优化器机制。需要强调达梦和Oracle优化器的相似性,这能帮助ta迁移知识。不过要避开太底层的实现细节,重点给可操作的方案。</think>在达梦数据库中使用 `IN` 关键字导致索引失效是常见的性能优化问题,主要原因及解决方法如下: --- ### **一、索引失效的原因** 1. **`IN` 列表值过多** 当 `IN` 子句包含大量值(如超过数百个),优化器可能认为全表扫描比多次索引查找更高效,从而放弃使用索引。 **原理**: 索引访问需多次 I/O 操作,而全表扫描可能只需连续读取数据块[^1]。 2. **统计信息不准确** 优化器依赖统计信息(如数据分布、基数)选择执行计划。若统计信息过期或缺失,优化器可能误判 `IN` 条件的成本,导致放弃索引[^1]。 3. **隐式类型转换** 若 `IN` 中的值与索引列数据类型不匹配(如索引列为 `VARCHAR`,但传入数值),会触发隐式转换,使索引失效。 **示例**: `WHERE id IN ('1001','1002')`(`id` 为数值类型)[^2]。 4. **`NULL` 值处理** 若 `IN` 列表包含 `NULL`(如 `WHERE col IN (1, NULL)`),达梦可能无法使用索引(索引不存储 `NULL` 值)。 5. **组合索引未遵循最左前缀** 对组合索引 `(col1, col2)`,查询 `WHERE col2 IN (...) AND col1=常量` 可用索引;但若仅用 `col2 IN (...)`, 索引失效。 --- ### **二、优化解决方法** #### 1. **拆分大列表** - 将超长 `IN` 列表拆分为多个查询,用 `UNION ALL` 合并: ```sql SELECT * FROM table WHERE id IN (1,2,...,100) UNION ALL SELECT * FROM table WHERE id IN (101,102,...,200); ``` #### 2. **改用临时表/派生表** ```sql -- 创建临时表存储值 CREATE GLOBAL TEMPORARY TABLE tmp_ids (id INT) ON COMMIT DELETE ROWS; INSERT INTO tmp_ids VALUES (1),(2),...; -- 通过 JOIN 使用索引 SELECT t.* FROM main_table t JOIN tmp_ids tmp ON t.id = tmp.id; ``` #### 3. **更新统计信息** ```sql -- 手动更新表统计信息 DBMS_STATS.GATHER_TABLE_STATS('SYSDBA', 'TABLE_NAME'); ``` #### 4. **避免隐式类型转换** - 确保 `IN` 中的值与索引列类型严格一致: ```sql -- 错误示例(id 为数值类型) SELECT * FROM t WHERE id IN ('1001','1002'); -- 正确示例 SELECT * FROM t WHERE id IN (1001,1002); ``` #### 5. **使用 `EXISTS` 替代 `IN`** ```sql SELECT * FROM table t WHERE EXISTS (SELECT 1 FROM tmp_ids tmp WHERE tmp.id = t.id); ``` #### 6. **优化器提示强制索引** ```sql SELECT /*+ INDEX(t IDX_NAME) */ * FROM table t WHERE id IN (...); ``` #### 7. **调整优化器参数** - 修改 `OPTIMIZER_MODE`(谨慎使用): ```sql ALTER SESSION SET OPTIMIZER_MODE = 1; -- 偏向索引扫描 ``` --- ### **三、验证索引是否生效** 通过 `EXPLAIN` 分析执行计划: ```sql EXPLAIN SELECT * FROM table WHERE id IN (1,2,3); ``` **有效索引计划特征**: - 出现 `INDEX SCAN` 或 `INDEX RANGE SCAN` - 无 `TABLE SCAN (FULL)` 或 `TABLE SCAN (LARGE)`[^4] --- ### **总结建议** | **场景** | **推荐方案** | |--------------------------|----------------------------------| | `IN` 列表值少(<100) | 直接使用 `IN` | | `IN` 列表值多(>1000) | 临时表 + `JOIN` 或拆分查询 | | 动态值来源于子查询 | 改用 `EXISTS` 或 `JOIN` | | 组合索引 | 确保最左列被条件引用 | > ⚠️ 注意:达梦关键字需用双引号标识(如 `"V$DM_INI"`),字段命名应避开关键字(如 `key`, `code`)[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值