У меня проблемы со временем отклика на запросы, которые я выполняю с помощью SQL Server.
Проведя исследование, я обнаружил, что хорошей практикой является создание индексов, связанных с полями в таблице или представлении.
Как лучше создать эти индексы, удобно ли сделать индекс для каждого поля или сделать индекс для нескольких полей?
Количество индексов, которые вам нужно создать, во многом зависит от вашего приложения и запросов, которые вы делаете.
Добавление индексов заставит запросы (SELECT) выполняться быстрее, но обновления базы данных (INSERT, UPDATE или DELETE) будут медленнее.
Вы определенно не должны создавать индекс для каждого поля. Что вам нужно сделать, так это понять, как работают индексы, чтобы знать, какие из них вы должны создать.
Лучше всего, если вы определите запросы, которые занимают больше всего времени, и для каждого из них решите, нужно ли вам создавать индекс или нет, и какой индекс создавать.
Некоторые правила, которые должны быть довольно общими в отношении того, какой индекс создавать (после идентификации запроса):
В любом случае в SQL Server есть инструмент SQL Server Profiler, который может помочь вам решить, какие индексы можно использовать в вашем приложении.
На что @Marcos сказал очень хорошо, я хотел очень просто объяснить предмет индексов.
SQL Server по умолчанию создает индексы для таблиц с использованием первичных ключей.
Много раз это то, что нужно, но это не всегда так.
Подумайте о бумажной телефонной книге: она организована по городам, фамилиям и именам . Можно сказать, что его индекс — это те поля. Таким образом найти номер легко, потому что это то, что вы обычно ищете. Если мне нужны все номера города «А», их легко получить.
Итак , что произойдет, если мне понадобятся все номера людей, чье имя «Хуан Мануэль»? Теперь индекс был бы бесполезен для меня. Мне пришлось бы ходить от корки до корки, чтобы вытащить их всех.
То же самое происходит и с базами данных. Важно, чтобы индекс был тем, что чаще всего ищут.
И еще деталь, в SQL Server у вас может быть два типа индексов.
Я призываю вас исследовать их и посмотреть, что лучше всего подходит для вашего приложения.
Короче говоря, насколько неправильно было бы не иметь индексов или создавать индексы, которые ни для чего не используются. Как объяснил вам @Marcos, это перегружает базу данных вещами, которые не используются.
Что мы обычно делаем в моей компании, так это наличие логического индекса по первичному ключу (для соединений). Индекс обычно группируется по полю даты и первичному ключу.
1.- В дополнение к тому, что вам сказали, я рекомендую вам использовать советник по настройке базы данных (DETA) с запросом, который вызывает у вас проблемы. DETA предложит вам предложения по улучшению структуры базы данных, чтобы сделать запрос более эффективным (иногда предлагает создание индексов, статистики и т. д.).
2.- Еще одна вещь, которую вы можете сделать, это проанализировать план выполнения и обнаружить что-то интересное, например, последовательное сканирование (сканирование таблицы) вместо поиска с индексами (индексный поиск).
3.- Если вам нужен очень общий совет, то, возможно, эти советы по использованию индексов в SQL Server будут вам полезны.