Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какво прави SQL изявлението sargable?

Най-често срещаното нещо, което ще направи заявката неподлежаща на саргиране е да включите поле вътре в функция в клаузата where:

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

SQL оптимизаторът не може да използва индекс на myDate, дори ако съществува такъв. Буквално ще трябва да оцени тази функция за всеки ред от таблицата. Много по-добре да се използва:

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

Някои други примери:

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. Обединяване на стойности на колони в списък, разделен със запетая

  2. Получаване на номер на седмица от дата в MS SQL Server 2005?

  3. Намерете не-ASCII знаци в колони varchar с помощта на SQL Server

  4. Как да поддържате реда на вмъкване в SQL Server

  5. Как да търся низ в база данни на SQL Server?