Некластерный индекс SQL Server
У меня есть два разных запроса в SQL Server, и я хочу уточнить
- как будет отличаться план выполнения, и
- какой из них более эффективен
Запросы:
SELECT *
FROM table_name
WHERE column < 2
а также
SELECT column
FROM table_name
WHERE column < 2
У меня есть некластеризованный индекс column
,
Я использовал Postgresql, и я не знаком с SQL Server и такими индексами.
Поскольку я прочитал много вопросов здесь, я держал две заметки:
Когда у меня есть некластеризованный индекс, мне нужен еще один шаг, чтобы получить доступ к данным
С некластеризованным индексом у меня могла бы быть копия части таблицы, и я получаю более быстрое время отклика.
Итак, я запутался.
Еще один вопрос заключается в том, что когда у меня есть "SELECT *", что влияет на некластеризованный индекс?
2 ответа
1-й запрос:
В зависимости от размера данных вы можете столкнуться с проблемами поиска, такими как поиск ключа и поиск RID.
2-й запрос:
Это будет быстрее, потому что он не будет извлекать столбцы, которые не являются частью индекса, хотя я рекомендую использовать индекс покрытия.
Я рекомендую вам проверить этот пост
Первый выбор будет использовать некластеризованный индекс, чтобы найти ключ кластеризации [кластерный индекс существует] или страницу и слот [нет кластеризованного индекса]. Тогда это будет использоваться для получения строки. План запроса будет отличаться в зависимости от ваших STATS (данных).
Второй запрос "покрывается" некластеризованным индексом. Это означает, что некластеризованный индекс содержит все данные, которые вы выбираете. Ключ кластеризации не требуется, и кластеризованный индекс и / или куча не нужны для предоставления данных в список выбора.