Viene visualizzato un comportamento del piano di esecuzione bizzarro da SQL Server (2005).sql server: il numero stimato di righe non è disponibile
TableName: LOG
... contiene circa 1000 righe
- ID int
- Nome 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
E ' stima il num b di righe restituite come 9 (Anche se è ovvio 2 o meno).
Inoltre, rimuovendo il simbolo "e Riga < = 2" aumenterà il tempo di esecuzione di circa * 5. ("e Riga < = 2" e "e Row < = 9.999.999,999999 millions" si comportano allo stesso)
ho statistiche aggiornate. Ma ancora, questo comportamento è strano. L'aggiunta di Riga < 99999999999 renderà la query più veloce? perché ?
Forza ragazzi, è facilmente riproducibile. Dove sono quei geni DBA quando ne hai bisogno? – Faruz
@Faruz: non sono un DBA. Ma la query è più veloce quando si ha un solo criterio senza AND/OR (cioè ROW = 1). Come si comporta quando 'ROW = 1 OR ROW = 2' rispetto all'uso di'> = 'e' <= '. Crea un indice per la tabella 'Log' internamente? – shahkalpesh
Riga = 1 o riga = 2 stimato 58 righe restituite ... Non crea un indice interno ma utilizza l'indice PK (ID). – Faruz