问题描述
我正在调查连接索引的问题
(也称为多列,复合或组合索引)。
因此,根据当前的设计,我有2列KEY1和KEY2,它们产生了我的主键pk1。
所以PK1会是这样的
现在我想做的是直接搜索连接的PK1
是否有可能直接在Oracle中执行此操作,而不是使用诸如
(也称为多列,复合或组合索引)。
因此,根据当前的设计,我有2列KEY1和KEY2,它们产生了我的主键pk1。
CREATE TABLE "myTable" ( "KEY1" VARCHAR2(7 CHAR) NOT NULL ENABLE, "KEY2" NUMBER(7,0) NOT NULL ENABLE, "INFO1" VARCHAR2(1 CHAR), "INFO2" VARCHAR2(2 CHAR) CONSTRAINT "PK1" PRIMARY KEY ("KEY1", "KEY2") ENABLE )复制
K1 |K2 ------|----- 12345 |1254 564874|521 6689 |76758复制
所以PK1会是这样的
PK1 --------- 123451254 564874521 668976758复制
现在我想做的是直接搜索连接的PK1
SELECT * FROM myTable WHERE PK1 = 564874521复制
是否有可能直接在Oracle中执行此操作,而不是使用诸如
SELECT * FROM myTable WHERE K1 = 564874 AND K2 = 521复制
专家解答
您可以创建一个虚拟列,将两者连接起来。并索引:
注意: 搜索值是一个字符串。如果在这里使用数字,则数据库to_number() 是虚拟列。意味着它不会使用索引。
虽然这个要求在我看来很可疑。您可以轻松地以具有不同主键的行结束。但是相同的串联键:
除非您还可以在连接字符串上添加唯一约束,否则此方法最终必将给您带来问题。
CREATE TABLE t ( "KEY1" VARCHAR2(7 CHAR) NOT NULL ENABLE, "KEY2" NUMBER(7,0) NOT NULL ENABLE, "INFO1" VARCHAR2(1 CHAR), "INFO2" VARCHAR2(2 CHAR), CONSTRAINT "PK1" PRIMARY KEY ("KEY1", "KEY2") ENABLE ); insert into t ( key1, key2 ) values (12345 ,1254); insert into t ( key1, key2 ) values (564874,521); insert into t ( key1, key2 ) values (6689 ,76758); commit; alter table t add pk as ( key1 || key2 ); create index i on t ( pk ); select * from t where pk = '564874521'; KEY1 KEY2 INFO1 INFO2 PK 564874 521564874521 复制
注意: 搜索值是一个字符串。如果在这里使用数字,则数据库to_number() 是虚拟列。意味着它不会使用索引。
虽然这个要求在我看来很可疑。您可以轻松地以具有不同主键的行结束。但是相同的串联键:
insert into t ( key1, key2 ) values (56487,4521); select * from t where pk = '564874521'; KEY1 KEY2 INFO1 INFO2 PK 564874 521564874521 56487 4521 564874521 复制
除非您还可以在连接字符串上添加唯一约束,否则此方法最终必将给您带来问题。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
766次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
649次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
575次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
526次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
521次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
499次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
484次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
449次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
374次阅读
2025-05-05 19:28:36