Настройка производительности SQL-запросов - план выполнения прилагается - PullRequest
0 голосов
/ 23 мая 2018

Есть запрос, который выполняется долго.Как повысить производительность запроса?

enter image description here

       DECLARE @p__linq__0 bigint = 131074
       ,@p__linq__1 datetimeoffset(7) = '2017-10-26 00:00:00 +00:00'
       ,@p__linq__2 datetimeoffset(7) = '2016-10-26 00:00:00 +00:00'
SELECT  distinct
            1 AS [C1],        
            [Extent5].[DisplayText] + ' (' + [Extent4].[ParameterCode] + ')' AS [C2],
            [Extent4].[ParameterCode] AS [ParameterCode], 
            [Extent5].[ParameterId] AS [ParameterId] 

--[Extent2].[ReceptionDate] AS [ReceptionDate], [Extent4].[ParameterId] AS [ParameterId], [Extent4].[ParameterCode] AS [ParameterCode]
                FROM    [dbo].[ClientSamples] AS [Extent1]
                INNER JOIN [dbo].[SamplesView] AS [Extent2] ON [Extent1].[SampleId] = [Extent2].[SampleId] 
                and [Extent1].[AccountCode] IN ('A00052498', 'A00091603', 'AFR000790', 'AFR025580', 'AFR033702', 'AFR034669', 'AFR065301')  
                AND [Extent2].[ReceptionDate] >= @p__linq__2 AND [Extent2].[ReceptionDate] <= @p__linq__1 
                INNER JOIN [dbo].[SampleTestFractionsView] AS [Extent3] ON [Extent2].[SampleId] = [Extent3].[SampleId]
                INNER JOIN [dbo].[ValidatedResults] AS [Extent4] ON [Extent3].[SampleTestFractionId] = [Extent4].[SampleTestFractionId]
                INNER JOIN [dbo].[ParameterTranslationsView] AS [Extent5] ON [Extent4].[ParameterId] = [Extent5].[ParameterId] AND (@p__linq__0 = [Extent5].[LanguageId])
                WHERE ([Extent5].[DisplayText] + ' (' + [Extent4].[ParameterCode] + ')' IS NOT NULL OR 
                (CAST(LEN([Extent5].[DisplayText] + ' (' + [Extent4].[ParameterCode] + ')') AS int)) != 0) 
                AND ' ' <> ([Extent5].[DisplayText] + ' (' + [Extent4].[ParameterCode] + ')')

Запрос занимает около 22 минут, чтобы вернуть результаты, а количество результатов составляет: 1068 записей.Здесь огромные данные находятся в таблицах ниже, и количество записей также дано

SampleTestFractionsView - 14861227 ValidatedResults - 74649333

1 Ответ

0 голосов
/ 24 мая 2018

Трудно ответить без знания о количестве (*) в каждой присоединенной ветви.Но в целом:

  • удалите distinct и посмотрите, сколько записей на самом деле футов соответствует вашим условиям
  • , если выбор из "маленьких" таблиц с и без отчетливыхсильно отличается, попробуйте выделить его, прежде чем присоединиться к «огромной» части . Прочитайте эту статью для примеров
  • попробуйте удалить вызовы встроенных функций в разделе WHERE (вы можете временно удалить егона все)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...