Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum Select Top 100 Prozent verwenden?

Es wurde für die "Zwischenmaterialisierung (Google-Suche)"

verwendet

Guter Artikel:Adam Machanic:Exploring the secrets of intermediate materialization

Er hat sogar ein MS Connect entwickelt, damit es auf eine sauberere Art und Weise gemacht werden kann

Meine Ansicht ist "nicht von Natur aus schlecht", aber verwenden Sie sie nicht, es sei denn, Sie sind sich zu 100% sicher. Das Problem ist, dass es nur zu dem Zeitpunkt funktioniert, zu dem Sie es tun, und wahrscheinlich nicht später (Patch-Level, Schema, Index, Zeilenanzahl usw.) ...

Ausgeführtes Beispiel

Dies kann fehlschlagen, da Sie nicht wissen, in welcher Reihenfolge die Dinge ausgewertet werden

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

Und das kann auch daran scheitern

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

Dies war jedoch in SQL Server 2000 nicht der Fall. Die innere Abfrage wird ausgewertet und gespoolt:

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

Beachten Sie, dass dies immer noch in SQL Server 2005 funktioniert

SELECT TOP 2000000000 ... ORDER BY...