В базе данных у меня менее 200 000 записей в таблице, а в хранимой процедуре я ссылаюсь на пару представлений, которые выполняют несколько ЛЕВЫХ СОЕДИНЕНИЙ и других объединений.
Одно из использованных представлений содержит четыреЛЕВЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ, еще два содержат несколько ВНУТРЕННИХ СОЕДИНЕНИЙ, просто связывающих таблицы / данные.
При просмотре плана выполнения sproc я обнаружил, что один запрос занимает 39% времени выполнения.Зеленым предложением было создать некластеризованный индекс по двум полям основной таблицы, что я и сделал (уже содержал кластеризованный индекс, поскольку он содержит автоинкрементный PK).
После добавления этого выполнениявремя не сильно уменьшилось, и в настоящее время оно колеблется в пределах 2,5 секунд.
Этого и следовало ожидать?
Я неравнодушен к хранению вещей (хотя, возможно, и не нормализованных) в больших мастер-таблицах, что исключает необходимость в представлениях / объединениях.
Было бы лучше всего реорганизовать БД таким способом,в это время?
ОБНОВЛЕНИЕ
Этот sproc выполняет около 14 различных правил, чтобы найти совпадения.Если совпадение найдено, содержимое добавляется к глобальному параметру.Таким образом, для проверки каждого правила существует отдельный запрос.
Вместо 14 или около того запросов в одном sproc, я создал отдельные sprocs и вызвал их, используя EXEC, передавая (вместе с другими параметрами)и возвращая этот глобальный параметр.
Я выполнил план выполнения с SET SHOWPLAN_ALL ON
.
Первым виновником (показывает общую стоимость поддерева 4.408248)
SELECT @ExternalTagName = etbs.ExternalTagName, @ExternalTagID = etbs.ExternalTagID, @ExternalPixelValue = etbs.ExternalPixelValue, @TriggerAlpha = ISNULL(SUM(dbo.FindInString(etbs.TriggerValue, @DocumentUrl)), '') FROM vw_ETBS etbs WHERE etbs.SystemBehaviouralSegmentID = 9 -- page url contains AND etbs.AccountContainerID = @AccountContainerID AND etbs.IsEnabled = 1 AND etbs.TriggerValue = @TriggerAlpha GROUP BY ExternalPixelValue, etbs.ExternalTagID, etbs.ExternalTagName --INSERT INTO DebugTable (DebugKey, DebugValue) --VALUES ('after sql', 'test') 79 259 1 NULL NULL 67 NULL 63.26242 NULL NULL NULL 4.408248 NULL NULL SELECT 0 NULL
|--Compute Scalar(DEFINE:([Expr1016]=CONVERT_IMPLICIT(varchar(6000),[ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue],0), [Expr1017]=CONVERT_IMPLICIT(varchar(512),isnull([Expr1015],(0)),0))) 79 260 259 Compute Scalar Compute Scalar DEFINE:([Expr1016]=CONVERT_IMPLICIT(varchar(6000),[ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue],0), [Expr1017]=CONVERT_IMPLICIT(varchar(512),isnull([Expr1015],(0)),0)) [Expr1016]=CONVERT_IMPLICIT(varchar(6000),[ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue],0), [Expr1017]=CONVERT_IMPLICIT(varchar(512),isnull([Expr1015],(0)),0) 63.26242 0 6.326241E-06 3293 4.408248 [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID], [Expr1016], [Expr1017] NULL PLAN_ROW 0 1
|--Compute Scalar(DEFINE:([Expr1015]=CASE WHEN [Expr1029]=(0) THEN NULL ELSE [Expr1030] END)) 79 261 260 Compute Scalar Compute Scalar DEFINE:([Expr1015]=CASE WHEN [Expr1029]=(0) THEN NULL ELSE [Expr1030] END) [Expr1015]=CASE WHEN [Expr1029]=(0) THEN NULL ELSE [Expr1030] END 63.26242 0 0.004639106 4063 4.408242 [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID], [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue], [Expr1015] NULL PLAN_ROW 0 1
|--Stream Aggregate(GROUP BY:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID]) DEFINE:([Expr1029]=COUNT_BIG([ROTags-Shopify-Alpha].[dbo].[FindInString]([Expr1019],CONVERT_IMPLICIT(varchar(max),[@DocumentUrl],0))), [Expr1030]=SUM([ROTags-Shopify-Alpha].[dbo].[FindInString]([Expr1019],CONVERT_IMPLICIT(varchar(max),[@DocumentUrl],0))), [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue]=ANY([ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue]))) 79 262 261 Stream Aggregate Aggregate GROUP BY:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID]) [Expr1029]=COUNT_BIG([ROTags-Shopify-Alpha].[dbo].[FindInString]([Expr1019],CONVERT_IMPLICIT(varchar(max),[@DocumentUrl],0))), [Expr1030]=SUM([ROTags-Shopify-Alpha].[dbo].[FindInString]([Expr1019],CONVERT_IMPLICIT(varchar(max),[@DocumentUrl],0))), [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue]=ANY([ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue]) 63.26242 0 0.004639106 4063 4.408242 [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID], [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue], [Expr1029], [Expr1030] NULL PLAN_ROW 0 1
|--Sort(ORDER BY:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName] ASC, [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID] ASC)) 79 263 262 Sort Sort ORDER BY:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName] ASC, [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID] ASC) NULL 7679.125 0.01126126 0.311861 4125 4.403603 [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID], [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue], [Expr1019] NULL PLAN_ROW 0 1
|--Nested Loops(Inner Join, OUTER REFERENCES:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[VisitorTriggeredTagID], [Expr1028]) WITH UNORDERED PREFETCH) 79 264 263 Nested Loops Inner Join OUTER REFERENCES:([ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[VisitorTriggeredTagID], [Expr1028]) WITH UNORDERED PREFETCH NULL 7679.125 0 0.03209874 4133 4.076795 [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagName], [ROTags-Shopify-Alpha].[dbo].[VisitorTriggeredExternalTag].[ExternalTagID], [ROTags-Shopify-Alpha].[dbo].[ExternalTagList].[ExternalPixelValue], [Expr1019] NULL PLAN_ROW 0 1
SELECT @ExternalTagName = ExternalTagName, @ExternalTagID = ExternalTagID, @ExternalPixelValue = ExternalPixelValue, @TriggerNumeric = COUNT(*)
FROM vw_ETBS
WHERE SystemBehaviouralSegmentID = 10 -- direct traffic
AND AccountContainerID = @AccountContainerID
AND vw_ETBS.IsEnabled = 1
GROUP BY ExternalPixelValue, ExternalTagID, ExternalTagName
vw_ETBS:
SELECT [lots of individual fields]
FROM dbo.VisitorTriggeredExternalTag LEFT OUTER JOIN
dbo.PageVisitEvents ON dbo.VisitorTriggeredExternalTag.PageVisitEventID = dbo.PageVisitEvents.PageVisitEventID LEFT OUTER JOIN
dbo.ExternalTagBehaviouralSegments ON dbo.VisitorTriggeredExternalTag.ExternalTagID = dbo.ExternalTagBehaviouralSegments.ExternalTagID LEFT OUTER JOIN
dbo.ExternalTagList ON dbo.ExternalTagBehaviouralSegments.ExternalTagID = dbo.ExternalTagList.ExternalTagID LEFT OUTER JOIN
dbo.AccountContainers ON dbo.ExternalTagList.AccountContainerID = dbo.AccountContainers.AccountContainerID