SQL План выполнения запроса к серверу - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь узнать об оптимизации баз данных и запросов. У меня есть тестовая таблица Objednavka, которая имеет атрибут внешнего ключа ODIS. В этой базе данных такие запросы, как

SELECT * FROM Objednavka WHERE ODIS = 123

, являются частыми, поэтому я создал такой индекс

CREATE NONCLUSTERED INDEX Objednavka_ODIS_index ON Objednavka (ODIS)

. Затем я посмотрел на план запроса, о котором я упоминал, и это то, что я см .:

query plan

Может кто-нибудь объяснить, почему у меня параллельно выполняются операции Index Seek и Key Lookup, а затем объединяются с помощью Nested Loops? Из того, что я узнал, я подумал, что Index Seek должен быть выполнен сначала , чтобы механизм нашел местоположение строки, содержащей (индексированный) атрибут ODIS в индексе, а затем должен получить все данные, используя Key Lookup, когда он уже знает местоположение, или я ошибаюсь?

1 Ответ

0 голосов
/ 13 января 2020

В некластеризованном индексе столбцы PK добавляются в него автоматически сервером SQL. Поиск по индексу - это поиск по b-дереву индекса по значениям, которые вы указали для индексированных столбцов, и результатом будут значения PK (или RID, если ваша таблица представляет собой кучу). Если все запрошенные вами столбцы являются частью индексированных столбцов, которые называются индексом покрытия, ваш запрос выполнен, потому что сервер SQL может получить всю информацию из b-дерева. Если вам нужно вернуть другие столбцы, отсутствующие в индексе, сервер SQL должен найти данные записи, используя PK, который является частью поиска ключа.

...