Количество логических чтений в SQL Server

Я пытаюсь понять, как работает сервер SQL доступа к данным.
Для очень простых запросов я могу точно рассчитать количество необходимых логических чтений, но у меня проблема со следующим довольно простым запросом:

SELECT  a.*
FROM TT_TMP_3 AS a
INNER JOIN TT_TMP_4 AS b
  ON b.id = a.id

Это код, который создает таблицы:

CREATE TABLE TT_TMP_3(
  id int,
  x int)

DECLARE @i int
SET @i = 0

WHILE @i <= 100000
BEGIN
  INSERT INTO TT_TMP_3
  VALUES(@i, 1)

  SET @i = @i + 1
END

SELECT  *
INTO TT_TMP_4
FROM TT_TMP_3
WHERE id <= 770  

CREATE INDEX IDX ON TT_TMP_3(ID)

План запроса следующий: План запроса

Статистика запросов следующая:
(Затронуты 771 строка) Таблица 'TT_TMP_3'. Сканирование 771, логическое чтение 2429, физическое чтение 0, чтение с опережением 6, логическое чтение с бита 0, физическое чтение с бита 0, чтение с опережением чтения 0.
Таблица "TT_TMP_4". Сканирование 1, логическое чтение 3, физическое чтение 0, чтение с опережением 0, логическое чтение с 0, физическое чтение с 0, чтение с опережением 0.

В TT_TMP_4 есть 771 строка, и поэтому требуется 771 поиск индекса. Каждому поиску нужно 2 логических чтения. Затем для каждой найденной строки необходимо выполнить RID_lookup, чтобы найти значение столбца x. Это дает нам еще 771 логическое чтение. Всего это 2313 чтений, еще 116 пропавших без вести.

Вопрос: Зачем эти 116 логических чтений?

0 ответов

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