Je reçois un comportement de plan d'exécution bizarre à partir de SQL Server (2005).sql server: Nombre estimé de lignes est loin
TableName: LOG
... contient environ 1000 lignes
- ID int
- Nom varchar (50)
Query:
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) as Row,
ID, Name
FROM Log) AS LogWithRowNumbers
WHERE Row >= 1
AND Row <= 2
Il estime le num Un nombre de rangées est retourné comme 9 (Bien que ce soit un 2 évident ou moins).
En outre, la suppression « et la ligne < = 2 » va augmenter le temps d'exécution d'environ * 5. (« et rangée < = 2 » et « et la ligne < = 9999999999999 » se comportent de la même)
J'ai statistiques mises à jour. Mais encore, ce comportement est étrange. L'ajout de la ligne < 99999999999 accélèrera l'exécution de la requête? Pourquoi ?
Allez les gars, il est facilement reproductible. Où sont ces génies DBA quand vous en avez besoin ?? – Faruz
@Faruz: Je ne suis pas un DBA. Mais la requête est-elle plus rapide lorsque vous avez un seul critère sans ET/OU (c'est-à-dire ROW = 1). Comment fonctionne-t-il quand 'ROW = 1 OR ROW = 2' par opposition à'> = 'et' <= '. Crée-t-il un index pour la table 'Log' en interne? – shahkalpesh
Ligne = 1 ou ligne = 2 estimé 58 lignes renvoyées ... Il ne crée pas d'index interne mais utilise l'index PK (ID). – Faruz