Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server: Scans and seeks

The most primitive operation in SQL Server is retrieving from a table a set of rows that satisfies a given search predicate. This can be achieved using two basic strategies: scans and seeks.

Scan

Scans can be performed on any structure (index or heap). Scanning a table means that SQL Server reads all the rows in the table. Only the rows satisfying the search predicate are returned. Scans imply sequential reads that are usually faster than reading each page individually, but the cost of this operation is proportional to the size of the table.

In indexes, SQL Server uses the pointers to the next page (or previous) for scanning. In a heap, it uses the IAM pages.
The number of logical reads during this operation is the number of pages read during the scan, plus one logical read at each non-leaf level, in case of an index, in order to locate the first row of the table. This operation counts as a scan in the IO statistics.

Seek

Seeks can only be performed on indexes (clustered or nonclustered). A seek is performed when SQL Server can leverage the ordering of the rows in the index to identify a range of rows in the index that contains all the rows satisfying the search predicate.

The search predicate is divided in two parts:

  • The seek predicate, such as all the rows within this range satisfy the seek predicate, and all the rows outside of that range don't. Seek predicates are usually predicates on the leftmost columns of the key of an index.
  • The residual predicate, such as the search predicate is the conjunction of the seek predicate and the residual predicate. The residual predicate is optional.

SQL Server will scan the range containing the rows satisfying the seek predicate, evaluate the residual predicate against each of them, and return only the rows that satisfy both.

In order to locate the first leaf-level row qualifying for the seek predicate, SQL Server reads one page at each non-leaf level of the index, from the root page, to the last non-leaf level.

There will be exactly one logical read at each non-leaf level of the index.

Then, at the leaf level of the index, all the rows satisfying the seek predicate have to be read:

  • If the index definition cannot guarantee that only a single row can satisfy the seek predicate, SQL Server scans all the pages from the page containing the first row qualifying, to the page containing the last row qualifying.
    The IO statistics will count this operation as a scan, and there will be as many logical reads at the leaf level as the number of pages scanned.
  • If the index definition guarantees that only a single row can satisfy the seek predicate, SQL Server just reads the page containing the qualifying row.
    The operation won't be counted as a scan, and there will be just a single logical read at the leaf level.

The logical reads performed at the leaf level are usually slower that logical reads at non-leaf levels because the non-leaf levels of indexes are often cached in memory.

Publié jeudi 18 décembre 2008 17:16 par RaptorXP
Classé sous : ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Utiliser les alertes dans SharePoint Online par Blog Technique de Romelard Fabrice le 11-30-2016, 12:45

- Windows: Comment comparer les outils de copie de fichiers disponibles en mode console avec un script PowerShell par Blog Technique de Romelard Fabrice le 11-18-2016, 11:17

- TFS 2017 est disponible ! par Blog de Jérémy Jeanson le 11-17-2016, 08:04

- Office 365: Configurer l’ouverture des fichiers dans Office Web Apps pour une Librarie Documentaire par Blog Technique de Romelard Fabrice le 11-15-2016, 17:14

- Office 365: Comment gérer les Access Requests dans les sites SharePoint Online par Blog Technique de Romelard Fabrice le 11-10-2016, 15:11

- Windows 2008 R2: Réduire la taille du répertoire system volume information par Blog Technique de Romelard Fabrice le 11-07-2016, 10:01

- UWP et langues indisponibles ? par Blog de Jérémy Jeanson le 11-04-2016, 12:54

- Impossible de se connecter à Windows Server Essentials 2016 par Blog de Jérémy Jeanson le 10-29-2016, 09:55

- Changer la langue d’un Windws Server Core 2016 par Blog de Jérémy Jeanson le 10-27-2016, 17:51

- Upgrade Windows Server 2016 in place et NIC Teaming par Blog de Jérémy Jeanson le 10-26-2016, 17:14