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

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21

- Onedrive Sync Engine Host : CPU à 100% par Le petit blog de Pierre / Pierre's little blog le 08-06-2014, 22:22

- SharePoint : Bug sur la gestion des permissions et la synchronisation Office par Blog Technique de Romelard Fabrice le 07-10-2014, 11:35

- SharePoint 2007 : La gestion des permissions pour les Workflows par Blog Technique de Romelard Fabrice le 07-08-2014, 11:27

- TypeMock: mock everything! par Fathi Bellahcene le 07-07-2014, 17:06

- Coding is like Read par Aurélien GALTIER le 07-01-2014, 15:30

- Mes vidéos autour des nouveautés VS 2013 par Fathi Bellahcene le 06-30-2014, 20:52

- Recherche un passionné .NET par Tkfé le 06-16-2014, 12:22

- [CodePlex] Projet KISS Workflow Foundation lancé par Blog de Jérémy Jeanson le 06-08-2014, 22:25