2013-10-11 1 views
0

J'ai une vue qui contient une requête qui peut renvoyer une grande quantité de données. Ensuite, dans mon application Delphi, j'appelle à cette vue avec une clause WHERE pour filtrer les résultats que je veux.Quand SQL Server évalue-t-il les clauses where dans une vue?

Donc, ma question est: quand le serveur SQL évaluera-t-il cette clause Where? Je veux dire, si j'ai appelé la vue suivante getSales (il est juste un exemple):

select * from sales

et la requête a:

select * from getSales where customer = :id

Qu'est-ce que SQL Server va faire? Va-t-il rechercher directement les ventes dont dispose le client d'identification fourni?

  1. Ou cherchera-t-il toutes les ventes et filtre le par ID client et après les obtenir les résultats?

Répondre

1

Remercions Il appliquera la clause where aux données de base en utilisant des index appropriés qui sont disponibles - à savoir qu'il sera efficace et rechercher directement les ventes qui ont le numéro de client une fois qu'il ya un indice sur l'identifiant du client Sans index, il pourrait potentiellement effectuer une analyse de table.

+0

En pré-SQL Server 2008, il peut y avoir des problèmes de performances dus à [push de prédicat] (http://jahaines.blogspot.ie/2010/03/performance-tuning-101-what-you-will_17.html) , mais les versions ultérieures devraient fonctionner plus ou moins comme prévu. –

+0

Dans la requête que je veux exécuter, les champs de paramètres font partie de la clé primaire de la table (le PK est une combinaison de l'identifiant client et de l'identifiant de la vente, et le filtre de la vue dépend uniquement du client – davidrgh

+1

Il devrait utiliser la clé primaire/index. Exécutez la requête dans SSMS et vérifiez le plan d'exécution pour être sûr. –

Questions connexes