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

Приложете условно филтриране в клаузата WHERE

Първо, този ((J.Id = @Jobid and @Jobid>0) or @Jobid=0) може да се замени
с този (@Jobid = 0 or J.Id = @Jobid) .Обърнете внимание, че от 0 очевидно не е валидна стойност за идентификатор на работа (или служител, или водещ), and част е без значение, тъй като нито един запис никога няма да съдържа id от 0.

Второ, не използвайте 0 като невалидна стойност използвайте null вместо. това няма да повлияе на производителността, но е по-добър навик за програмиране, тъй като 0 може много добре да бъде валидна стойност в други ситуации.

Трето, известно е, че catch-all заявките страдат от влошаване на производителността, особено в съхранените процедури, тъй като кешираният план за изпълнение може да не е най-добрият за текущото изпълнение. Доколкото ми е известно, най-добрият начин да се справите с това е да добавите намек за повторно компилиране към заявката, както е предложено в тази статия и в тази статия .

И така, предлагам вашата заявка да изглежда така:

CREATE PROCEDURE <procedure name>
(
        @Jobid      INT=NULL,
        @leadid     INT=NULL,
        @employeeid INT=NULL
)
AS

SELECT e.id,
       l.id,
       j.id,
       e.NAME,
       l.NAME,
       j.NAME
FROM   employee e
       INNER JOIN leads l
               ON e.leadid = l.id
       INNER JOIN Jobs j
               ON j.id = e.Jobid 
WHERE (@Jobid IS NULL OR J.Id = @Jobid)
AND (@leadid IS NULL OR l.Id = @leadid)
AND (@employeeid IS NULL OR e.Id = @employeeid)
OPTION(RECOMPILE)

GO

select производителността обикновено се подобрява с правилно индексиране на таблиците. Правилното индексиране обаче изисква знания, които не всички разработчици имат. Това е тема, която си струва да се прочете. Бих започнал тук .



  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. SSIS LookUp не се занимава с NULL, както се казва в документите, че трябва

  3. Параметризирайте SQL IN клауза

  4. преглед на променените стойности след израз за актуализиране

  5. Как да използвате изявление GO в SQL Server за вмъкване на записи в колона за самоличност - SQL Server / T-SQL урок, част 42