Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co sprawia, że ​​instrukcja SQL jest sargowalna?

Najczęstsza rzecz, która sprawi, że zapytanie nie będzie argowane jest umieszczenie pola wewnątrz funkcji w klauzuli WHERE:

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

Optymalizator SQL nie może użyć indeksu myDate, nawet jeśli taki istnieje. Będzie musiał dosłownie ocenić tę funkcję dla każdego wiersza tabeli. Dużo lepiej w użyciu:

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

Kilka innych przykładów:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy są jakieś wady, aby zawsze używać nvarchar(MAX)?

  2. Kiedy muszę używać początku/końca bloków i słowa kluczowego Go w programie SQL Server?

  3. Jak przywrócić bazę danych z C#

  4. SQL Server INFORMATION_SCHEMA Widoki | Sprawdź, czy stół istnieje

  5. Uwierzytelnianie SQL Server a uwierzytelnianie Windows:którego używać i kiedy