Высокие логические чтения для простого запроса - PullRequest
0 голосов
/ 28 ноября 2018

У меня очень простой запрос, такой как

select col1,col2 from table A where pk_col =1

, где pk_col - первичный ключ.

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

(1 row affected)
Table 'A'. Scan count 1, logical reads 2948, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Время выполнения SQL Server: CPU time = 46 ms, elapsed time = 105 ms.

1) Почему логические чтения так высоки, даже если извлекается только запись?

1 Ответ

0 голосов
/ 28 ноября 2018

Поскольку pk_col равно varchar SQL Server необходимо преобразовать pk_col в int, поскольку int имеет более высокий приоритет:

Тип данных (Transact-SQL)

Таким образом, запрос эквивалентен:

SELECT col1,col2 FROM table A 
where CONVERT(int, pk_col) =1

А включение столбцов в функции или выражения не позволяет SQL Server использовать индексы.Поэтому SQL Server должен сканировать всю таблицу.Отсюда большое количество логических чтений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...