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

Co dělá příkaz SQL sargable?

Nejběžnější věc, díky které bude dotaz neproměnitelný je zahrnout pole do funkce v klauzuli where:

SELECT ... FROM ...
WHERE Year(myDate) = 2008

Optimalizátor SQL nemůže použít index na myDate, i když takový existuje. Tuto funkci bude muset doslova vyhodnotit pro každý řádek tabulky. Mnohem lepší použití:

WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'

Některé další příklady:

Bad: Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))

Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'

Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate()) 


  1. Jak zavřít připojení sqlalchemy v MySQL

  2. Co dělá (+) v Oracle SQL?

  3. Jak mohu vygenerovat (nebo získat) skript ddl na existující tabulce v oracle? Musím je znovu vytvořit v Hive

  4. Dynamicky generujte sloupce pro křížové tabulky v PostgreSQL