194
Chapitre 6. Utilisation des index
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
[ NORECOMPUTE ]
] ;
Il peut être intéressant par exemple de créer manuellement des statistiques sur
une combinaison de colonnes pour améliorer l’estimation du plan d’une requête
dont la clause WHERE filtre sur ces colonnes.
WITH FULLSCAN vous permet d’indiquer que toutes les valeurs doivent être parcourues. Sur les tables volumineuses, l’échantillonnage ne se fait pas sur toutes les
valeurs, les statistiques seront donc moins précises. En indiquant WITH FULLSCAN (ou
WITH SAMPLE 100 PERCENT, qui est équivalent), vous forcez SQL Server à prendre en
compte toutes les lignes. Pour les tables de taille moyenne, l’échantillonnage se fait
de toute manière sur toutes les valeurs. SQL Server s’assure un minimum de 8 Mo de
données échantillonnées (1024 pages ou plus), ou la taille de la table si elle pèse
moins.
À l’inverse, vous pouvez demander un échantillonnage moins précis avec
l’option WITH SAMPLE. Notez que si SQL Server considère que votre sampling n’est
pas suffisamment élevé pour générer des statistiques utiles, il corrige lui-même la
valeur à la hausse.
Avec NORECOMPUTE, vous forcez SQL Server à ne jamais mettre à jour automatiquement ces statistiques. Ne l’utilisez que si vous savez ce que vous faites.
Vous pouvez supprimer des statistiques avec l’instruction DROP STATISTICS. Vous
ne devriez normalement jamais avoir à faire cela.
Vous pouvez, grâce à la procédure sp_createstats créer en une seule fois des statistiques pour toutes les colonnes de toutes les tables de votre base. Cela est superflu
dans la plupart des cas : pourquoi maintenir des statistiques sur des colonnes jamais
filtrées ?
Mise à jour
La mise à jour des statistiques est importante. Pour reprendre notre exemple,
supposons qu’avant de partir pour Courtrai, vous en parliez avec votre grand-père
qui vous annonce qu’il connaît bien Courtrai pour y avoir passé ses vacances d’été
pendant plusieurs années avec sa famille lorsqu’il était enfant. Par politesse, vous
évitez de commenter les choix de destination de vacances de vos arrières grandsparents, d’autant plus qu’il se souvient d’avoir eu en son temps un plan détaillé de la
ville. Intéressant, cela vous permettrait de vous faire une idée plus précise de vos
déplacements. Après quelques recherches au grenier, il vous ressort un vieux plan
très jauni, qui date de 1933. Pensez-vous réellement qu’il va vous être très utile,
sachant que la ville a été très endommagée par les bombardements de 1944, et
qu’une grande partie de celle-ci a été reconstruite après la guerre ?
Le contenu de votre table évolue, et vous ne pouvez baser ad vitam aeternam
l’évaluation de la sélectivité d’une colonne sur les statistiques telles qu’elles ont été
créées. Cette mise à jour doit se faire régulièrement et prendre en compte les larges
Chapitre 6. Utilisation des index
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
[ NORECOMPUTE ]
] ;
Il peut être intéressant par exemple de créer manuellement des statistiques sur
une combinaison de colonnes pour améliorer l’estimation du plan d’une requête
dont la clause WHERE filtre sur ces colonnes.
WITH FULLSCAN vous permet d’indiquer que toutes les valeurs doivent être parcourues. Sur les tables volumineuses, l’échantillonnage ne se fait pas sur toutes les
valeurs, les statistiques seront donc moins précises. En indiquant WITH FULLSCAN (ou
WITH SAMPLE 100 PERCENT, qui est équivalent), vous forcez SQL Server à prendre en
compte toutes les lignes. Pour les tables de taille moyenne, l’échantillonnage se fait
de toute manière sur toutes les valeurs. SQL Server s’assure un minimum de 8 Mo de
données échantillonnées (1024 pages ou plus), ou la taille de la table si elle pèse
moins.
À l’inverse, vous pouvez demander un échantillonnage moins précis avec
l’option WITH SAMPLE. Notez que si SQL Server considère que votre sampling n’est
pas suffisamment élevé pour générer des statistiques utiles, il corrige lui-même la
valeur à la hausse.
Avec NORECOMPUTE, vous forcez SQL Server à ne jamais mettre à jour automatiquement ces statistiques. Ne l’utilisez que si vous savez ce que vous faites.
Vous pouvez supprimer des statistiques avec l’instruction DROP STATISTICS. Vous
ne devriez normalement jamais avoir à faire cela.
Vous pouvez, grâce à la procédure sp_createstats créer en une seule fois des statistiques pour toutes les colonnes de toutes les tables de votre base. Cela est superflu
dans la plupart des cas : pourquoi maintenir des statistiques sur des colonnes jamais
filtrées ?
Mise à jour
La mise à jour des statistiques est importante. Pour reprendre notre exemple,
supposons qu’avant de partir pour Courtrai, vous en parliez avec votre grand-père
qui vous annonce qu’il connaît bien Courtrai pour y avoir passé ses vacances d’été
pendant plusieurs années avec sa famille lorsqu’il était enfant. Par politesse, vous
évitez de commenter les choix de destination de vacances de vos arrières grandsparents, d’autant plus qu’il se souvient d’avoir eu en son temps un plan détaillé de la
ville. Intéressant, cela vous permettrait de vous faire une idée plus précise de vos
déplacements. Après quelques recherches au grenier, il vous ressort un vieux plan
très jauni, qui date de 1933. Pensez-vous réellement qu’il va vous être très utile,
sachant que la ville a été très endommagée par les bombardements de 1944, et
qu’une grande partie de celle-ci a été reconstruite après la guerre ?
Le contenu de votre table évolue, et vous ne pouvez baser ad vitam aeternam
l’évaluation de la sélectivité d’une colonne sur les statistiques telles qu’elles ont été
créées. Cette mise à jour doit se faire régulièrement et prendre en compte les larges
