Количество логических чтений в 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 логических чтений?