За последние 24 часа нас посетили 22915 программистов и 1245 роботов. Сейчас ищут 755 программистов ...

Индекс по двум полям

Тема в разделе "MSSQL", создана пользователем glorsh66, 15 окт 2017.

  1. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Люди поясните как он работает?
    пример
    поле name, email

    Оба уникальные.
    Есть ли смысл делать индекс на два поля сразу (не по отдельности) и в есть ли выигрышь в данном случае?
    Или оно только для случаев - where and
     
  2. uri

    uri Активный пользователь

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Касается не только MSSQL. Обычно, оптимизатор сам решает (исходя из множества своих внутренних предпочтений, например, насколько актуальна статистика) какой\какие индексы использовать.
    И потом, есть такая штука как покрывающие индексы - в каком порядке указаны поля составного индекса и как эти поля используются в запросах.
    Сделай и такой и такой, и поиграйся:
    1) поиском с условием в WHERE
    2) join`ы с другими табличками
    Посмотри планы выполнения, статистику по операциям чтения, как они будут использоваться (естественно БЕЗ хинтов в запросах).
    Подозреваю, что смысл есть только при выполнении 3 условий:
    1) мало дублирующихся\NULL значений - здесь выполняется
    2) большой объем данных
    3) условие WHERE составлено таким образом, что поля индекса используются в том же порядке, как они указаны при создании индекса.
    Кстати, если данных ну совсем немного, иногда FULL SCAN по табличке предпочтительнее (т.е. вообще отказ от индексов).