Подтвердить что ты не робот

SQL Server: индексированные столбцы, используемые как?

Хорошо ли индексировать столбцы varchar, используемые только в LIKE-операциях? Из того, что я могу прочитать из аналитики запросов, я получаю из следующего запроса:

SELECT * FROM ClientUsers WHERE Email LIKE '%[email protected]%'

Я получаю "Оценочную стоимость поддерева" 0,38 без индекса и 0,14 с индексом. Является ли это хорошей метрикой для использования при anlayzing, если запрос был оптимизирован с индексом?

4b9b3361

Ответ 1

Учитывая данные 'abcdefg'

WHERE Column1 LIKE '%cde%'  --can't use an index

WHERE Column1 LIKE 'abc%' --can use and index

WHERE Column1 Like '%defg' --can't use an index, but see note below

Примечание. Если у вас есть важные запросы, для которых требуется "% defg", вы можете использовать постоянный вычисленный столбец, где вы REVERSE() столбец, а затем индексируете его. Затем вы можете запросить:

WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column index

Ответ 2

По моему опыту, первый% -sign сделает любой индекс бесполезным, но один в конце будет использовать индекс.

Ответ 3

Чтобы ответить на часть метрики вашего вопроса: Тип сканирования/поиска индекса/таблицы является хорошим индикатором для того, чтобы знать, используется ли индекс (правильно). Обычно он отображается в анализаторе плана запроса. Следующие типы сканирования/поиска сортируются от худшего (вверху) до лучшего (снизу):

  • Сканирование таблицы
  • Сканирование индексированных кластеров
  • Индексная сканирование
  • Поиск кластеризованного индекса
  • Поиск индекса

Как правило, вы, как правило, пытаетесь получить поиск по просмотрам, когда это возможно. Как всегда, есть исключения в зависимости от размера таблицы, запросов столбцов и т.д. Я рекомендую сделать поиск в StackOverflow для "индекса поиска поиска", и вы получите много хорошей информации по этому вопросу.