В SQL-сервере вы можете написать
create index indx on T1 (A,B) INCLUDE (C,D,E)
Есть ли способ сделать то же самое в Oracle?
В SQL-сервере вы можете написать
create index indx on T1 (A,B) INCLUDE (C,D,E)
Есть ли способ сделать то же самое в Oracle?
Просто поместите все столбцы в индекс:
create index indx on T1 (A,B,C,D,E)
Если Oracle решит использовать ваш индекс (например, A и B находятся в предложении WHERE), он будет принимать значения C, D и E из индекса.
Если столбцы очень длинны varchars, Oracle может не создавать индекс. Это иногда называют "закрытым" индексом, и я использовал или видел его более чем несколько раз.
Refs:
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
В качестве индекса (A) относятся (B, C)
Level1 Leaf
A1 B1,C1 | B2,C3 | B3,C6 | B3,C7
A2 null,null
Разница в структуре хранилища (которая влияет на производительность) является причиной того, что они вводятся как INCLUDED-столбцы, иначе не было бы причин вводить эту новую функцию.
Вы можете создать индексную упорядоченную таблицу и сохранить только определенные столбцы с ключом. Обратите внимание, что вы не указываете столбцы для включения, вы указываете только последний и включаете все столбцы до этого. (Что кажется странным, обычно порядок столбцов в SQL не имеет значения.) Лично я считаю, что индексированные таблицы являются странными и имеют слишком много ограничений, идея redcayuga, вероятно, лучше.
create table t1
(
a number,
b number,
c number,
d number,
e number,
f number,
g number,
primary key (a, b, c)
)
organization index
including e
overflow;