【发布时间】:2016-08-12 19:43:33
【问题描述】:
1/在表格中,index I1 on T(col1, col2) 与 index I2 on T(col2, col1) 有何不同?我们可以同时创建吗?以Unique Index为例。
Index Skip Scanning 似乎表明列顺序很重要,这意味着 I1 可能与 I2 不同。
在另一篇文章中,我看到了
CREATE TABLE INVOICES
(ID NUMBER(11),
INVOICE_DATE DATE,
CONSTRAINT UN_ID UNIQUE(ID, DATE) USING INDEX(CREATE INDEX I_INVOICES ON INVOICES(ID, INVOICE_DATE)),
CONSTRAINT UN_DATE UNIQUE(DATE, ID) USING INDEX I_INVOICES);
表示Unique constraints (col1, col2) 和(col2, col1) 使用相同的index (col1, col2)。
大家的一些见解?我的问题不是关于 当我们选择一个而不是另一个?
但是关于它们何时共存 它们是两个不同的索引/对象吗?顺序重要吗?为什么该示例对两者都使用相同的索引?因为顺序很重要,除了 (col1, col2) 之外创建另一个索引 (col2, col1) 会更好吗?
2/ 关于同一个问题:为什么我们只使用 CREATE INDEX 而不是 CREATE UNIQUE INDEX ?在什么情况下我们使用CREATE UNIQUE INDEX?
【问题讨论】:
-
在创建任何索引之前,您应该知道如何使用它。所以您需要知道: 1. 哪些查询将针对您的表运行; 2. 数据的基数以及哪一列的基数更高/更低。等等然后你就可以决定你需要什么索引:
col1或col2上的普通/压缩索引和((col1, col2)上的unique index或(col2, col1)上的(col2, col1)
标签: oracle indexing oracle11g oracle10g table-index