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

Hvorfor bruge Vælg Top 100 procent?

Det blev brugt til "mellemmaterialisering (Google-søgning)"

God artikel:Adam Machanic:Exploring the secrets of intermediate materialization

Han har endda rejst en MS Connect, så det kan gøres på en renere måde

Mit syn er "ikke iboende dårligt", men brug det ikke, medmindre det er 100% sikker. Problemet er, at det kun virker på det tidspunkt, du gør det og sandsynligvis ikke senere (patch-niveau, skema, indeks, rækkeantal osv.)...

Et fungerende eksempel

Dette kan mislykkes, fordi du ikke ved, i hvilken rækkefølge tingene vurderes

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

Og dette kan også mislykkes, fordi

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

Dette gjorde dog ikke i SQL Server 2000. Den indre forespørgsel evalueres og spooles:

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

Bemærk, dette virker stadig i SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...


  1. SET DATEFIRST – Indstil den første dag i ugen i SQL Server

  2. Konverter latin1-tegn på en UTF8-tabel til UTF8

  3. Optimer MySQL/MariaDB-ydeevnen med MySQLTunner-værktøjet

  4. Hvornår er det tid til at opgradere til SQL?