Cela dépend vraiment des index et des types de données.
En utilisant la base de données Stack Overflow comme exemple, voici à quoi ressemble la table Users:
Il a un PK / CX sur la colonne Id. Il s'agit donc de l'intégralité des données de la table triées par Id.
Avec cela comme seul index, SQL doit lire tout cela (sans les colonnes LOB) en mémoire s'il n'est pas déjà là.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SET STATISTICS TIME, IO ON
SELECT u.Id
INTO #crap1
FROM dbo.Users AS u
Le temps des statistiques et le profil io ressemblent à ceci:
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.
Si j'ajoute un index non cluster supplémentaire sur juste l'ID
CREATE INDEX ix_whatever ON dbo.Users (Id)
J'ai maintenant un index beaucoup plus petit qui satisfait ma requête.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SELECT u.Id
INTO #crap2
FROM dbo.Users AS u
Le profil ici:
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.
Nous pouvons faire beaucoup moins de lectures et gagner un peu de temps CPU.
Sans plus d'informations sur la définition de votre table, je ne peux pas vraiment essayer de reproduire ce que vous essayez de mieux mesurer.
Mais vous dites qu'à moins qu'il n'y ait un index spécifique sur cette seule colonne, les autres colonnes / champs seront également analysés? S'agit-il simplement d'un inconvénient inhérent à la conception des tables de Rowstore? Pourquoi les champs non pertinents seraient-ils analysés?
Oui, cela est spécifique aux tables rowstore. Les données sont stockées par la ligne sur les pages de données. Même si d'autres données de la page ne sont pas pertinentes pour votre requête, cette ligne entière> page> index doit être lue en mémoire. Je ne dirais pas que les autres colonnes sont "scannées" autant que les pages sur lesquelles elles existent sont scannées pour récupérer la valeur unique sur celles-ci en rapport avec la requête.
En utilisant l'exemple de l'annuaire téléphonique: même si vous ne faites que lire des numéros de téléphone, lorsque vous tournez la page, vous tournez le nom, le prénom, l'adresse, etc. avec le numéro de téléphone.