2010-02-02 8 views
2

Est-il possible d'améliorer les performances en prenant l'instruction SQL suivante:CROSS APPLY Performance

SELECT t1.id, 
     t1.name, 
     t2.subname, 
     t2.refvalue 
FROM table1 AS t1 
     CROSS apply (SELECT TOP 1 t2.subid, 
           t2.subname, 
           t3.refvalue 
        FROM table2 AS t2 
          INNER JOIN table3 AS t3 
            ON t2.subid = t3.subid 
        ORDER BY lastupdated DESC) AS t2 

Et réécrire pour qu'il ressemble à ceci:

SELECT t1.id, 
     t1.name, 
     t2.subname, 
     t3.refvalue 
FROM table1 AS t1 
     CROSS apply (SELECT TOP 1 t2.subid, 
           t2.subname 
        FROM table2 AS t2 
        ORDER BY lastupdated DESC) AS t2 
     INNER JOIN table3 AS t3 
       ON t2.subid = t3.subid 

Répondre

1

Tout d'abord, il ne donne le même résultat ?

Si oui, que dit le plan de requête, ainsi que set statistics io on?

0

Combien de lignes dans Table1, Table2 et Table3? Combien se croisent et finissent dans le résultat? J'essaie de comprendre le but de la réécriture de la requête, et je suis d'accord avec gbn ... obtenez-vous le même résultat, le plan de requête est-il le même dans les deux cas, les statistiques sont-elles meilleures? la requête réécrite s'exécute-t-elle plus rapidement?

+0

Oui, j'obtiens les mêmes résultats. Est-ce que vous voyez quelque chose qui suggère que ceux-ci ne font pas la même chose? Si c'est une aide, subId correspond à un seul enregistrement dans la table3. Le but de la réécriture de la requête serait d'améliorer les performances. Ceci est une version simplifiée d'une requête beaucoup plus compliquée que je réécris. Je vous ferai savoir ce que les statistiques/plan de requête disent une fois que je l'ai. –