Oracle等效于SQL Server包含要索引的列

时间:2011-08-19 18:05:23

标签: sql oracle

Oracle是否允许我将索引包含在列中(如INCLUDE中的SQL Server CREATE INDEX子句)?

感谢。

2 个答案:

答案 0 :(得分:5)

没有。 Oracle中的索引要么包含索引本身的列,要么不包括。

但是,根据您尝试解决的问题,索引组织表可能是Oracle中的相应模拟表。

答案 1 :(得分:0)

CREATE TABLE test (
    a       VARCHAR2(400 char) NOT NULL PRIMARY KEY,
    b       NUMBER(33) NOT NULL
);

CREATE TABLE test_2 (
    a       VARCHAR2(400 char) NOT NULL,
    b       NUMBER(33) NOT NULL
);
CREATE INDEX ix_test_2 ON test_2(a, b);

explain plan for
select a,b from test where a in ('a', 'b', 'c');

--|   0 | SELECT STATEMENT(50)
--|   1 |  INLIST ITERATOR
--|   2 |   TABLE ACCESS BY INDEX ROWID
--|*  3 |    INDEX UNIQUE SCAN         

explain plan for
select a,b from test_2 where a in ('a', 'b', 'c');

--|   0 | SELECT STATEMENT
--|   1 |  INLIST ITERATOR       
--|*  2 |   INDEX RANGE SCAN

因此,在我看来,至少在Oracle12c中,包括索引中的b列可以防止表访问->更快。