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

Откуда:
Сообщений: 1497
Собственно в теме весь запрос :)
24 дек 14, 15:00    [17046351]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
как правило нет :) но, есть варианты...например таблица с большим кол-ом записей и нужна выборка по этому полю, которое может содержать 2 значения, где одно-90% данных, а 2-ое - 10%, тогда имеет смысл, например, индекс с условием по значению, где данных <10%
24 дек 14, 15:04    [17046385]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Более вероятно, что будут иметь смысл составные индексы, в которые будет включено и это поле.
24 дек 14, 15:10    [17046434]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Диам,

Общей рекомендации нет, как обычно - зависит...
Важна селективность, для конкретного запроса. Если у вас, например, 99% записей имеет одно значение, а 1% другой - то такой индекс может быть использован. Хотя в такой ситуации, уместнее фильтрованный индекс. Можете использовать двузначное поле в качестве фильтра, а в качестве ключа - другие поля, релевантные запросу - такой индекс будет эффективнее.
Если индекс состоит из нескольких полей, и запрос спрашивает двузначное поле по равенству, то это тоже хорошая идея, например, для предиката "where Status = 'A' and CreationDate > '20140101'", индекс (Status, CreationDate) лучше, чем (CreationDate, Status)
Ну и гугл в помощь, по фразе: "sql server index on bit column"
24 дек 14, 15:12    [17046456]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
9955697
24 дек 14, 15:15    [17046485]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Диам
Member

Откуда:
Сообщений: 1497
Knyazev Alexey, спасибо, применил.

А вот такая ситуация: по полю в таблице осуществляется связь, например со справочником сотрудников. В таблице 200тыс. записей, в справочнике 100. Есть вьюхи, в которых эти две таблицы связаны, но запросов с условиями по этому полю нет.
Нужен ли тут индекс?
24 дек 14, 15:17    [17046503]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Диам
Нужен ли тут индекс?

индекс нужен не только для условия выборки, но и для JOIN-операций...но у вас получается полное сканирование таблицы фактов без ограничений...
хотя, опять же, в классической схеме "звезда" по всем полям связи со справочниками желательно строить индекс
24 дек 14, 15:30    [17046620]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Диам
Member

Откуда:
Сообщений: 1497
Knyazev Alexey
хотя, опять же, в классической схеме "звезда" по всем полям связи со справочниками желательно строить индекс

У меня так все и есть. И уже таких индексов перевалил за десяток... это нормально такое количество индексов?
24 дек 14, 15:37    [17046673]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Диам
Knyazev Alexey
хотя, опять же, в классической схеме "звезда" по всем полям связи со справочниками желательно строить индекс

У меня так все и есть. И уже таких индексов перевалил за десяток... это нормально такое количество индексов?


всё зависит от вашей рабочей нагрузки, возможно где-то стоит создать составные индексы, а где-то отказаться от них
24 дек 14, 15:40    [17046710]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Диам
Knyazev Alexey
хотя, опять же, в классической схеме "звезда" по всем полям связи со справочниками желательно строить индекс

У меня так все и есть.


можете тут почитать про общие рекомендации, но это всё в теории, у вас может быть частный случай
http://technet.microsoft.com/ru-ru/magazine/2008.04.dwperformance.aspx
24 дек 14, 15:47    [17046778]     Ответить | Цитировать Сообщить модератору
 Re: Нужен ли индекс для поля если в нем может быть всего два значения  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Диам,

Индексы создаются под запрос(ы). Также, часто, при создании новой таблицы, можно предположить какие индексы будут нужны и создать их заранее. Индекс - суть - вспомогательная структура для доступа к данным, и лучший критерий оценки эффективности индекса, то, используется ли он и как используется.

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

Проще говоря, общего хорошего и 100%-го совета нет. Просто смотрите на ваши запросы и планы.
24 дек 14, 15:58    [17046878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить