在Oracle SQL主键上声明附加索引时会发生什么情况?
我有一个多部分的问题: 我的旅程始于我试图弄清楚在Oracle SQL中是否可以使用主键的降序/升序 在在Oracle SQL主键上声明附加索引时会发生什么情况?,sql,oracle,indexing,primary-key,Sql,Oracle,Indexing,Primary Key,我有一个多部分的问题: 我的旅程始于我试图弄清楚在Oracle SQL中是否可以使用主键的降序/升序 在CREATE TABLE MYTAB(ID INT PRIMARY KEY DESC)中似乎没有语法或创建表MYTAB(ID INT,约束主键(ID DESC)) 后来我了解到Oracle隐式地为主键创建索引,以帮助强制执行其约束。我想我可以为它创建一个索引,并使索引递减 在MYTAB上创建索引MYIND(ID DESC) 这是有效的,当我进行查询以查看存在哪些索引时,我得到了以下结果: &g
CREATE TABLE MYTAB(ID INT PRIMARY KEY DESC)中似乎没有语法代码>或创建表MYTAB(ID INT,约束主键(ID DESC))代码>
后来我了解到Oracle隐式地为主键创建索引,以帮助强制执行其约束。我想我可以为它创建一个索引,并使索引递减
在MYTAB上创建索引MYIND(ID DESC)代码>
这是有效的,当我进行查询以查看存在哪些索引时,我得到了以下结果:
> SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'MYTAB';
INDEX_NAME
------------------------------
SYS_C0011939
MYIND
我看到隐式创建的索引和我自己的索引都在那里。。。我试图通过在表创建期间为主键创建索引,看看是否可以摆脱隐式创建的索引:
CREATE TABLE MYTAB (ID INT PRIMARY KEY USING INDEX (CREATE INDEX MYIND ON MYTAB (ID ASC)));
这起到了作用:
> SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'MYTAB';
INDEX_NAME
------------------------------
MYIND
有趣的是,使用DESC作为索引方向会产生以下错误:
指定的索引不能用于强制约束。
因此,我的问题是:
这是否意味着在Oracle SQL中不能降序主键李>
如果是,为什么DESC不允许强制执行主键约束李>
在我的第一个示例中,单独创建索引的行为/效果是什么?DESC在那里工作。。。当主键上有两个索引时会发生什么?它的功能是否与另一个DB允许DESC作为主键规范的一部分的方式相同李>
Oracle将索引创建为双链接列表,以便在需要时按升序或降序遍历每个索引
但是,对于多列索引,您可以添加DESC
关键字,使一列或多列按降序相对于其他列存储
这种方法的用处有限,不经常使用,但当您在特定查询中创建一个专门支持特定ORDER BY
子句的索引时,这种方法非常有用列按降序排序。为什么您认为需要DESC索引?我正在编写一个工具,它将为一组不同的数据库生成语句-我正在研究允许用户指定升序/降序选项,并了解每个不同的db实现如何处理升序/降序索引。好像甲骨文没有必要像你说的那样