Некластерный индекс SQL Server

У меня есть два разных запроса в SQL Server, и я хочу уточнить

  1. как будет отличаться план выполнения, и
  2. какой из них более эффективен

Запросы:

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 (данных).

Второй запрос "покрывается" некластеризованным индексом. Это означает, что некластеризованный индекс содержит все данные, которые вы выбираете. Ключ кластеризации не требуется, и кластеризованный индекс и / или куча не нужны для предоставления данных в список выбора.

Другие вопросы по тегам