Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ssms
Member

Откуда:
Сообщений: 124
Добрый день.


Хочу создать индекс, включающий 4 колонки таблицы.

Типы полей такие:

с1 int
с2 varchar(15)
с3 float
с4 int




Читаю мануалы:

column

Столбец или столбцы, на которых основан индекс



INCLUDE (column [ ,... n ] )

Указывает неключевые столбцы, добавляемые на конечный уровень некластеризованного индекса.Некластеризованный индекс может быть уникальным или неуникальным.



Но мало чего понял из этого...

Интересует с практической точки зрения как предпочтительнее сделать (занимаемое место, производительность и т.д.)

CREATE NONCLUSTERED INDEX [index1] ON table1 (c1,c2,c3,c4)


или

CREATE NONCLUSTERED INDEX [index1] ON table1 (c1) INCLUDE (c2,c3,c4)


?
26 апр 18, 18:39    [21371824]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
С практической точкой зрения индексы делаются для каких-то запросов или ограничений.
26 апр 18, 18:47    [21371840]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ssms
Member

Откуда:
Сообщений: 124
Гавриленко Сергей Алексеевич
С практической точкой зрения индексы делаются для каких-то запросов или ограничений.


Запросы, используют в условиях выборки эти 4 поля.
Есть внешний ключ по полю c4, но отсутствует индекс.

Так же есть кластерный индекс по полю id. (оно отсутствует среди этих четырех полей)
26 апр 18, 18:49    [21371845]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
ssms
Запросы, используют в условиях выборки эти 4 поля.

Одновременно?
26 апр 18, 18:51    [21371850]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ssms
Member

Откуда:
Сообщений: 124
Гавриленко Сергей Алексеевич
ssms
Запросы, используют в условиях выборки эти 4 поля.

Одновременно?


Разные запросы по 1-2 поля.
26 апр 18, 18:58    [21371862]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
ssms
Гавриленко Сергей Алексеевич
пропущено...

Одновременно?


Разные запросы по 1-2 поля.
Индекс (c1,c2,c3,c4) может использоваться только если вы используете в запросе комбинации полей c1-c2-c3-c4, c1-c2-c3, c1-c2, c1. И то, "использование" должно быть вполне определенным. Как только у вас выпадает поле из цепочки ключей, все остальные, что правее, сразу выпадают из seek predicate.

Сообщение было отредактировано: 26 апр 18, 19:26
26 апр 18, 19:19    [21371912]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ЛиП
Member

Откуда:
Сообщений: 348
Include используется дляя селекта этих полей. При поиски он бесполезен
27 апр 18, 09:32    [21372708]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ssms
Member

Откуда:
Сообщений: 124
ЛиП
Include используется дляя селекта этих полей. При поиски он бесполезен


Я так и думал.
27 апр 18, 11:37    [21373123]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
ssms
Member

Откуда:
Сообщений: 124
Гавриленко Сергей Алексеевич
ssms
пропущено...


Разные запросы по 1-2 поля.
Индекс (c1,c2,c3,c4) может использоваться только если вы используете в запросе комбинации полей c1-c2-c3-c4, c1-c2-c3, c1-c2, c1. И то, "использование" должно быть вполне определенным. Как только у вас выпадает поле из цепочки ключей, все остальные, что правее, сразу выпадают из seek predicate.


Получается если индекс (c1,c2,c3,c4), то выборка по c2 уже его не использует. Жалко (
27 апр 18, 11:38    [21373128]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
ЛиП
Include используется дляя селекта этих полей. При поиски он бесполезен

это не так.
вам привести пример плана,
где выбран просмотр некластерного только потому,
что там есть инклуд, по которому в запросе условие поиска, и прочие поля, необходимые для запроса?
кластерный там не по полю поиска и весит гораздо больше некластерного,
в результате выбирается покрывающий некластерный,
хотя и в нем тоже поле поиска вовсе не ключевое
27 апр 18, 11:51    [21373216]     Ответить | Цитировать Сообщить модератору
 Re: Где при создании индекса колонка будет занимать больше места? (INCLUDE или напрямую)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7401
ssms,

использовать может для просмотра, что, в конце концов, быстрее, чем просмотр кучи.
27 апр 18, 11:55    [21373234]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить