Press "Enter" to skip to content

Pourquoi la requête SQL s'exécute-t-elle plus lentement après la création des index ?

Cette fois, la requête est revenue en 2,9 secondes (parfois cela a pris 3,9 secondes aussi). Mon objectif est de minimiser au maximum le temps d'exécution des requêtes. Mais après avoir ajouté des index ou après avoir calculé des statistiques, le temps de requête n'a cessé d'augmenter. Pourquoi cela se produit-il et comment puis-je m'améliorer même en conservant les index ?

Q. Quelle est la requête la plus lente dans MySQL ?

Cette table user_match_ratings contient plus de 220 millions de lignes (9 Go de données ou près de 20 Go d'index). Les requêtes sur cette table s'affichent régulièrement dans slow.log (seuil > 2 secondes) et constituent la requête lente la plus fréquemment enregistrée dans le système :

Q. Comment l'indexation affecte-t-elle les performances d'une requête ?

Mais même les index qui offrent de meilleures performances pour certaines opérations peuvent ajouter une surcharge pour d'autres. Bien que l'exécution d'une instruction SELECT soit plus rapide sur une table en cluster, les INSERT, UPDATE et DELETE nécessitent plus de temps, car non seulement les données sont mises à jour, mais les index sont également mis à jour.

Q. Comment améliorer les performances des requêtes lors de la sélection de presque toutes les lignes ?

Lorsque je supprime tout sauf l'index clusterisé (PK), les performances sont souvent améliorées jusqu'à 3-4 secondes. Les lectures logiques sont réduites tandis que le nombre de balayages est divisé par deux. Quelques notes sur les données : les résultats de la clause select et where avant le regroupement sont d'environ 500 000 lignes (presque la totalité du tableau).

Q. Comment l'indexation affecte-t-elle les performances de SQL Server ?

Si les index ne sont pas correctement créés, SQL Server doit parcourir plus d'enregistrements afin de récupérer les données demandées par une requête. Par conséquent, il utilise plus de ressources matérielles (processeur, mémoire, disque et réseau) et l'obtention des données dure plus longtemps.

Q. Que dois-je faire si ma requête SQL Server est lente ?

Si la requête n'est pas en cours d'exécution, vous pouvez la rechercher dans le cache du plan à l'aide de sp_BlitzCache *. Si vous utilisez SQL Server 2016+ et que le magasin de requêtes est activé, vous pouvez utiliser sp_BlitzQueryStore *. Ceux-ci vous aideront à retrouver la ou les versions en cache de votre procédure stockée. S'il ne s'agit que de code paramétré, votre recherche est un peu plus difficile.

Q. Pourquoi la requête SQL prend-elle autant de temps ?

La requête prend 1,90 seconde. Si je relance la requête, cela prend 1,66 seconde. Pourquoi cela prend-il plus de temps lors de la première manche ? Afin de l'accélérer, j'ai créé des index sur les deux colonnes utilisées dans la requête. SQL> créer l'index ind_tab3_orgid sur tab3 (COL1); Index créé.

Q. Que dois-je faire si ma requête SQL est lente ?

C'est comme un index à la fin d'un livre. Si vous exécutez une requête et qu'elle est lente, elle pourrait bénéficier des index. Les index sont souvent les plus utiles lorsqu'ils sont créés sur des colonnes dans le cadre de la clause Join et de la clause Where. Vérifiez donc quelles colonnes y sont utilisées, vérifiez si elles ont des index et créez-les si ce n'est pas le cas.

Q. Comment les index peuvent-ils améliorer les performances d'une requête ?

Les index sont un moyen simple et efficace d'améliorer les performances de votre requête. Un index est un objet de base de données qui stocke les références des lignes dans une table basée sur une colonne spécifique. C'est comme un index à la fin d'un livre. Si vous exécutez une requête et qu'elle est lente, elle pourrait bénéficier des index.

Q. Qu'est-ce que cela signifie si une table a un mauvais index ?

Un index erroné peut être un index créé sur une colonne qui ne facilite pas la manipulation des données ou un index créé sur plusieurs colonnes qui, au lieu d'accélérer les requêtes, les ralentit. Une table sans index clusterisé peut également être considérée comme une mauvaise pratique d'indexation.

Q. Pourquoi l'index n'accélère-t-il pas l'exécution ?

L'index n'accélère pas l'exécution et, dans certains cas, ralentit la requête. Pourquoi en est-il ainsi ? J'expérimentais avec des index pour accélérer les choses, mais en cas de jointure, l'index n'améliore pas le temps d'exécution de la requête et dans certains cas, il ralentit les choses. La requête pour créer une table de test et la remplir avec des données est : CREATE TABLE [dbo].