ВКЛЮЧИТЬ эквивалент в Oracle

В SQL-сервере вы можете написать

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

Есть ли способ сделать то же самое в Oracle?

Ответ 1

Просто поместите все столбцы в индекс:

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

Если Oracle решит использовать ваш индекс (например, A и B находятся в предложении WHERE), он будет принимать значения C, D и E из индекса.

Если столбцы очень длинны varchars, Oracle может не создавать индекс. Это иногда называют "закрытым" индексом, и я использовал или видел его более чем несколько раз.

Ответ 2

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-столбцы, иначе не было бы причин вводить эту новую функцию.

Ответ 3

Вы можете создать индексную упорядоченную таблицу и сохранить только определенные столбцы с ключом. Обратите внимание, что вы не указываете столбцы для включения, вы указываете только последний и включаете все столбцы до этого. (Что кажется странным, обычно порядок столбцов в 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;