/ / Ajouter une requête interne ne modifie pas le plan d'exécution - sql, performance, sql-server-2005, sql-execution-plan

L'ajout d'une requête interne ne modifie pas le plan d'exécution - sql, performance, sql-server-2005, sql-execution-plan

Considérez les requêtes suivantes.

select * from contact where firstname like "%some%"

select * from
(select * from contact) as t1
where firstname like "%some%"

Les plans d’exécution des deux requêtes sont identiques ets'exécute en même temps. Mais je m'attendais à ce que la deuxième requête ait un plan différent et s'exécute plus lentement car elle doit sélectionner toutes les données du contact et appliquer le filtre. On dirait que je me suis trompé.

Je me demande comment cela se passe?

Serveur de base de données: SQL Server 2005

Réponses:

6 pour la réponse № 1

Le "optimiseur de requête" est ce qui se passe. Lorsque vous exécutez une requête, SQL Server utilise un optimiseur basé sur les coûts pour identifier le meilleur moyen de répondre à cette requête (c’est-à-dire son plan d’exécution). Considérez-le comme une carte de routage allant du lieu A au lieu B. Il existe différentes manières de passer d'un point à un autre, certaines étant plus rapides que d'autres. SQL Server utilisera différents itinéraires pour atteindre l'objectif final consistant à renvoyer les données qui répondent à la requête et à en utiliser un qui présente un coût acceptable. Notez que cela n’analyse pas nécessairement TOUS les moyens possibles, car cela coûterait inutilement cher.

Dans votre cas, l’optimiseur a déterminé que ces 2 requêtes peuvent être regroupées pour former la même chose, vous obtenez donc le même plan.