Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché utilizzare Select Top 100 Percent?

È stato utilizzato per "materializzazione intermedia (ricerca Google)"

Buon articolo:Adam Machanic:esplorare i segreti della materializzazione intermedia

Ha persino sollevato un MS Connect in modo che possa essere fatto in modo più pulito

Il mio punto di vista "non è intrinsecamente negativo", ma non usarlo a meno che non sia sicuro al 100%. Il problema è che funziona solo nel momento in cui lo fai e probabilmente non più tardi (livello di patch, schema, indice, conteggio delle righe ecc.)...

Esempio funzionante

Questa operazione potrebbe non riuscire perché non sai in quale ordine vengono valutate le cose

SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100

E questo potrebbe anche fallire perché

SELECT foo
FROM
    (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar
WHERE
    CAST(foo AS int) > 100

Tuttavia, ciò non accadeva in SQL Server 2000. La query interna viene valutata e sottoposta a spooling:

SELECT foo
FROM
    (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
    CAST(foo AS int) > 100

Nota, funziona ancora in SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...