sql >> Databáze >  >> RDS >> Sqlserver

Proč používat Select Top 100 Percent?

Byl použit pro „střední materializaci (vyhledávání Google)“

Dobrý článek:Adam Machanic:Zkoumání tajemství intermediární materializace

Dokonce vytvořil MS Connect, takže to může být provedeno čistším způsobem

Můj názor je "není ve své podstatě špatný", ale nepoužívejte jej, pokud si nejste 100% jistý. Problém je v tom, že to funguje pouze v době, kdy to uděláte, a pravděpodobně ne později (úroveň opravy, schéma, index, počet řádků atd.)...

Fungovaný příklad

To může selhat, protože nevíte, v jakém pořadí se věci hodnotí

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

A to může také selhat, protože

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

To se však nestalo v SQL Server 2000. Vnitřní dotaz je vyhodnocen a zařazen do fronty:

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

Všimněte si, že to stále funguje v SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...


  1. Uložení časového pásma v datovém typu časové razítko s časovým pásmem

  2. Funkce JSON_QUERY() v Oracle

  3. ORA-00947 Při globální deklaraci typu není dostatek hodnot

  4. Jak zpětně vytvořit databázi v MySQL Workbench