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中做同样的事情?
只需将所有列放在索引中:
create index indx on T1 (A,B,C,D,E)
如果Oracle决定使用您的索引(例如,A和B在WHERE子句中),它将从索引中获取C,D和E的值.
如果列是非常长的varchars,Oracle可能无法构建索引.这有时被称为"覆盖"索引,我已经多次使用或看过它.
参考:
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列引入的原因,否则没有理由引入这个新功能.
| 归档时间: |
|
| 查看次数: |
12319 次 |
| 最近记录: |