Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La même requête SQL prend plus de temps à s'exécuter dans une base de données qu'une autre base de données sous le même serveur

Le fait que vous ayez deux bases de données sur le même serveur et avec le même ensemble de données (comme vous l'avez dit) ne garantit pas le même plan d'exécution.

Voici quelques-unes des raisons pour lesquelles le plan de requête peut être différent :

  • les fichiers mdf et ldf (pour chaque base de données) se trouvent sur des lecteurs différents. Si onedrives est plus rapide, cette base de données exécutera également la requête plus rapidement.
  • statistiques au point mort. Si vous avez une base de données avec des statistiques plus récentes que l'autre, SQL a de meilleures chances de choisir un plan d'exécution approprié (et
    plus rapide).
  • Index :je sais que vous avez dit qu'ils sont identiques, mais je vérifierais si vous avez le même type d'index sur les deux.

Concentrez-vous sur la raison pour laquelle la requête s'exécute lentement ou sur le plan d'exécution réel, au lieu de comparer. La vérification du plan d'exécution réel pour la requête lente vous donnera une idée de la raison pour laquelle elle s'exécute plus lentement.

De plus, je n'ajouterais pas d'instruction NO LOCK pour résoudre le problème. D'après mon expérience, la plupart des requêtes lentes peuvent être réglées via le code ou l'index, au lieu d'ajouter un indice NO LOCK qui peut vous faire modifier ou modifier les anciens ensembles de résultats, en fonction de vos transactions.