Це дійсно залежить від індексів та типів даних.
Використовуючи базу даних переповнення стека як приклад, так виглядає таблиця користувачів:
Він має PK / CX у стовпці Id. Отже, це сукупність даних таблиці, відсортованих за Id.
Маючи це єдиний індекс, SQL повинен прочитати все це (без колон LOB) у пам'яті, якщо його ще немає.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SET STATISTICS TIME, IO ON
SELECT u.Id
INTO #crap1
FROM dbo.Users AS u
Час статистики та іо-профіль виглядає так:
Table 'Users'. Scan count 7, logical reads 80846, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2406 ms, elapsed time = 446 ms.
Якщо я додаю додатковий некластеризований індекс лише на Id
CREATE INDEX ix_whatever ON dbo.Users (Id)
Зараз у мене набагато менший індекс, який задовольняє мій запит.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SELECT u.Id
INTO #crap2
FROM dbo.Users AS u
Профіль тут:
Table 'Users'. Scan count 7, logical reads 6587, physical reads 0, read-ahead reads 6549, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2344 ms, elapsed time = 384 ms.
Ми можемо зробити набагато менше читань та заощадити трохи часу на процесорі.
Без додаткової інформації про ваше визначення таблиці я не можу реально спробувати відтворити те, що ви намагаєтесь краще виміряти.
Але ви говорите, що, якщо в цьому самотньому стовпчику немає конкретного індексу, інші стовпці / поля також будуть скановані? Це лише недолік, притаманний дизайну столових рядів? Чому б сканувати невідповідні поля?
Так, це характерно для таблиць рядків. Дані зберігаються рядком на сторінках даних. Навіть якщо інші дані на сторінці не мають значення для вашого запиту, весь цей рядок> сторінка> індекс потрібно прочитати в пам'яті. Я б не сказав, що інші стовпці "скануються" настільки, що сторінки, на яких вони існують, скануються, щоб отримати єдине значення, яке стосується запиту.
Використання прикладу телефонної книги ol: навіть якщо ви просто читаєте телефонні номери, коли ви перегортаєте сторінку, ви перетворюєте прізвище, ім’я, адресу тощо разом із номером телефону.