Настройка запросов и перезапись - SQL Server - PullRequest
1 голос
/ 26 марта 2019

Не могли бы вы помочь оптимизировать приведенный ниже запрос, чтобы он работал лучше?Могу ли я уменьшить стоимость?

SELECT this_.id               AS id1_20_0_, 
       this_.version          AS version2_20_0_, 
       this_.domain           AS domain4_20_0_, 
       this_.createdate       AS createda5_20_0_, 
       this_.lastmodifydate   AS lastmodi6_20_0_, 
       this_.ownerid          AS ownerid7_20_0_, 
       this_.timeperiod       AS timeperi8_20_0_, 
       this_.type             AS type9_20_0_, 
       this_.capturesource    AS capture10_20_0_, 
       this_.value            AS value11_20_0_, 
       this_.siteid           AS siteid12_20_0_, 
       this_.lastmodifyuserid AS lastmod13_20_0_, 
       this_.classid          AS classId3_20_0_ 
FROM   dbo.pcwdepconstraints this_ 
WHERE  this_.classid = 65 
       AND this_.ownerid = 200000000001 
       AND ( this_.capturesource IS NULL 
              OR this_.capturesource IN ( 1073741826, 1073741827, 0, 1, 2 ) ) 

Execution Plan

Я воссоздал ix2_pcwdepcons столбцами, указанными ниже, но по-прежнему нет изменений в плане выполнения и его стоимости.

( this_.id , 
       this_.version   , 
       this_.domain ,
       this_.createdate  ,
       this_.lastmodifydate,

       this_.timeperiod  ,
       this_.type  , 
        this_.value   ,       
       this_.siteid       
       this_.lastmodifyuserid )

1 Ответ

0 голосов
/ 26 марта 2019

План выполнения показывает, что у вас есть поиск (чтобы найти основную информацию), а также «поиск ключа», что является довольно дорогой операцией, которую вы должны стараться избегать, если можете.

Глядя на запрос, я вижу, что вы используете classid, ownerid и capturesource в предложении WHERE - так что они должны быть в индексе. Если вы можете, вы также можете «включить» все остальные столбцы в предложении SELECT вашего запроса в этот индекс, чтобы избежать «поиска ключа».

Так что я бы сказал, попробуйте такой индекс:

CREATE NONCLUSTERED INDEX IX_Test
ON dbo.pcwdepconstraints_bkp (classid, ownerid, capturesource)
INCLUDE (id, version, domain, createdate, lastmodifydate, lastmodifyuserid,
         timeperiod, type, value, siteid)

Включая, что многие столбцы имеют смысл, только если это не весь список столбцов из этой таблицы. Эти столбцы будут занимать место, поэтому вы будете тратить больше времени на увеличение производительности запросов и больше дискового пространства. Но если в вашей таблице гораздо больше столбцов и ваш запрос выбирает «только» эти 13 (поскольку они действительно нужны), то INCLUDE может быть действительно полезным для ускорения процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...