索引(col1,col2)和索引(col2,col1)

时间:2016-04-20 08:53:01

标签: oracle indexing oracle11g oracle10g table-index

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 个答案:

答案 0 :(得分:0)

订购综合指数的关键

请按照以下指南对复合索引中的键进行排序:

创建索引,以便WHERE子句中使用的键构成一个前导部分。 如果更频繁地在WHERE子句中使用某些键,那么请确保创建索引,以便更频繁选择的键构成一个前导部分,以允许仅使用这些键的语句使用索引。 如果在WHERE子句中经常使用所有键,那么在CREATE INDEX语句中将这些键从最具选择性排序到最少选择性可以最好地提高查询性能。 如果所有键都经常在WHERE子句中使用,但数据在其中一个键上进行物理排序,则将该键首先放在复合索引中。

来自:https://docs.oracle.com/cd/B10501_01/server.920/a96533/data_acc.htm#2174

2 /在同一个问题上:为什么我们只使用CREATE INDEX而不是CREATE UNIQUE INDEX?在这种情况下,我们使用CREATE UNIQUE INDEX?

它表示索引列中值的组合必须是唯一的。

来自:http://www.techonthenet.com/oracle/indexes.php

请记住:如果您要在表格上创建唯一键,那么也会自动创建唯一索引