2017-09-05 1 views
-2

Je souhaite interroger un grand ensemble de données dans SQL - quelle est la bonne approche?SQL: requête de grande table

declare @datetime Datetime 

select * 
from sales 
where salesdate <= @datetme 

ou:

select * 
from sales 
where salesdate < (select GetDate()) 

ou:

select * 
from sales 
where salesdate < GetDate() 

ou en utilisant NOW()

+2

En supposant que vous utilisez SQL Server: je serais ** très ** surpris s'il y avait une différence entre ces requêtes. –

+0

Non Im demandant sur la performance –

+4

Oui. Et nous pensons que la performance ne sera pas différente. –

Répondre

1

Select * from sales where salesdate < GetDate() semble la manière la plus logique de le faire, son moins SQL que Select * from sales where salesdate < (Select GetDate()) et il n'y a pas beaucoup de point dans la déclaration d'une variable comme la première option Si vous ne lancez qu'une seule requête, si vous en utilisez beaucoup ou dans une procédure stockée, l'ajout de la variable aurait du sens.

Mais regardez les plans d'exécution et de voir qui effectue le meilleur

6

Tous les trois auront même plan d'exécution autre que 0% étape ASSIGN pour la variable dans la requête no. 1. Mais il sera bon à long terme d'initialiser la variable comme DATETIME et ensuite de la comparer. Lorsque vous avez de longues comparaisons à faire de cette façon, l'utilisateur aura l'habitude de formater datetime dans une variable et comparer la colonne à ces variables. Sinon, il devient une habitude de mise en forme de la colonne SQL, puis de le faire avec la date. Cela formate le champ datetime dans chaque ligne de données pour la comparaison avec la valeur et rend les comparaisons de datetime lents.

Pour cette requête particulière, pour des raisons de lisibilité et de facilité d'utilisation, vous pouvez sélectionner le numéro de requête. 3 [Sélectionnez * parmi les ventes où salesdate < GetDate()].