包含Oracle中的等效项

Mic*_*ael 17 sql-server oracle indexing

在SQL Server中,您可以编写

create index indx on T1 (A,B) INCLUDE (C,D,E) 
Run Code Online (Sandbox Code Playgroud)

有没有办法在Oracle中做同样的事情?

red*_*uga 7

只需将所有列放在索引中:

create index indx on T1 (A,B,C,D,E)

如果Oracle决定使用您的索引(例如,A和B在WHERE子句中),它将从索引中获取C,D和E的值.

如果列是非常长的varchars,Oracle可能无法构建索引.这有时被称为"覆盖"索引,我已经多次使用或看过它.


Ric*_*iwi 7

参考:
http://msdn.microsoft.com/en-us/library/ms190806.aspx
http://www.dba-oracle.com/t_garmany_easysql_btree_index.htm

这个答案在这里指出,SQL Server Included列不会在关键级别存储INCLUDED列,只能在叶级别存储.如果包含4列,则它们将作为数据存储在叶级别的块中.

将它们创建为复合索引的附加部分会将索引分解为更多级别.

作为综合指数(A,B,C)

  Level1   Level2   Leaf
           (Branch)
  A1
           B1
                    C1
           B2
                    C3
           B3
                    C6
                    C7
  A2
Run Code Online (Sandbox Code Playgroud)

索引(A)包括(B,C)

  Level1    Leaf
  A1        B1,C1 | B2,C3 | B3,C6 | B3,C7
  A2        null,null
Run Code Online (Sandbox Code Playgroud)

存储结构的差异(影响性能)是它们作为INCLUDED列引入的原因,否则没有理由引入这个新功能.