ВКЛЮЧИТЬ эквивалент в Oracle - PullRequest
16 голосов
/ 24 февраля 2011

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

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

Можно ли сделать то же самое в Oracle?

Ответы [ 3 ]

7 голосов
/ 24 февраля 2011

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

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

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

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

6 голосов
/ 24 февраля 2011

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

Этот ответ здесь для того, чтобы указать, что столбцы, включенные в SQL Server, не хранят столбцы 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, в противном случае не было бы оснований для введения этой новой функции.

4 голосов
/ 24 февраля 2011

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