Optimisation des performances SQL : compter les requêtes
Lorsque vous travaillez avec de grands ensembles de données, les requêtes qui comptent des lignes peuvent devenir coûteuses en termes de calcul et ralentir les performances. Cet article explore les implications en termes de performances des requêtes de nombre et propose des solutions pour les optimiser dans SQL Server.
Différences de performances dans les requêtes de nombre
Considérez la requête SQL suivante sur une table avec plus de 20 millions de lignes :
if (select count(*) from BookChapters) = 0
Cette requête s'exécute rapidement, car SQL Server l'optimise into :
if exists(select * from BookChapters)
Essentiellement, il vérifie la présence de lignes plutôt que de les compter. Cependant, si la requête est modifiée en :
if (select count(*) from BookChapters) = 1
ou
if (select count(*) from BookChapters) > 1
le temps d'exécution augmente considérablement jusqu'à plus de 10 minutes.
Comprendre l'écart de performances
La différence de performances vient du fait que pour les requêtes de comptage avec des conditions (par exemple, = 1, > 1), SQL Server utilise une approche différente. Il utilise l'index non clusterisé le plus étroit pour compter les lignes. Étant donné que la table de l'exemple ne dispose d'aucun index non clusterisé, SQL Server doit recourir à une analyse complète de la table, ce qui entraîne un ralentissement des performances.
Techniques d'optimisation
Pour optimiser comptez les requêtes, envisagez les techniques suivantes :
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count] FROM sys.sysindexes i WITH (NOLOCK) WHERE i.indid in (0,1) ORDER BY i.rowcnt desc
select sum (spart.rows) from sys.partitions spart where spart.object_id = object_id(’YourTable’) and spart.index_id < 2
select max(ROWS) from sysindexes where id = object_id(’YourTable’)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!