2015-12-15 4 views
-1

Я пытаюсь избавиться от операции поиска ключей в объяснении плана следующего запроса:Не может избавиться от поиска ключей в плане объяснения

  SELECT s.CompanyId , 
        t.PeriodEndDate , 
        t.DurationId , 
        s.conceptid AS SConceptId , 
        c.ConceptId AS CConceptId, 
        t.NumOfPeriods , 
        cast(cast(s.Value as numeric) as varchar(100)) as Value, 
        s.ConceptId * 17.0 AS ConceptOrdering , 
        t.CompoundSortKeyLogicalKey, 
        1980 + (s.NumberOfQuarters/4) AS FiscalYear, 
        (s.NumberOfQuarters % 4) + 1 AS FiscalQuarter, 
        cam.Alias 
      FROM [dbo].[TmpCompanyOrderedAndFilteredPKs] t 
        INNER JOIN [dbo].[synt_ScreenerDb_dbo_ScreenerHistoricalYTD_Number_t] s ON s.CompanyId = t.CompanyId 
                  AND s.numberofquarters = t.numberofquarters AND ((t.numberOfQuarters % 4) + 1) = 4 
        INNER JOIN [##FinancialsConcepts7FD96D75-FCDB-44B0-9DED-6FE0BC128982] c ON c.ConceptMapId = s.ConceptId 
        LEFT JOIN dbo.ConceptAliasMapping cam ON cam.ConceptId = c.ConceptId 
      WHERE t.OperationGUID = '7FD96D75-FCDB-44B0-9DED-6FE0BC128982' 

скриншот из объяснения плана: enter image description here

Я попытался создать индексы на следующие столбцы:

Value, ConceptId, CompanyId, NumberOfQuarters 

с различной комбинацией на указательный и включаемые столбцы. Что я упустил?

ответ

1

В вашем запросе есть много предложений по эффективности. Выполните шаги, указанные ниже, чтобы избежать поиска ключевых слов.

Включить все столбцы в операторе отбора в непромышленной кластерный индекс

 create nonclustered index ncli_1 on TmpCompanyOrderedAndFilteredPKs(CompanyId) 
     include(PeriodEndDate,DurationId ,NumOfPeriods,CompoundSortKeyLogicalKey,numberofquarters) 

     create nonclustered index ncli_2 on synt_ScreenerDb_dbo_ScreenerHistoricalYTD_Number_t(CompanyId) 
     include(conceptid ,Value ,NumberOfQuarters) 

     create nonclustered index ncli_3 on ##FinancialsConcepts7FD96D75-FCDB-44B0-9DED-6FE0BC128982(ConceptId) 

    `create unique clustered index cli_4 on ##FinancialsConcepts7FD96D75-FCDB-44B0-9DED-6FE0BC128982(ConceptMapId)` -- This will make sql server use 
merge join` instead of hash join which will provide performance gain. 
+0

просто создать некластеризованный индекс IX__ScreenerHistoricalYTD_Number_t_CompanyId на ScreenerHistoricalYTD_Number_t (CompanyID) --include (conceptid, Value, NumberOfQuarters) было достаточно –

Смежные вопросы