Я выполняю операцию сворачивания в своей хранимой процедуре следующим образом, но это влияет на производительность, поскольку я использую ее для отчета.SQL - Улучшение производительности сводных запросов
Есть ли способ/заменить эту операцию поворота, чтобы улучшить производительность? или я могу применять индексы для этого?
SELECT colId,colSequence,colDescription,
ISNULL([1],0) AS 'IESO',ISNULL([2],0) AS 'RFRC',ISNULL([3],0) AS 'EAL',ISNULL([4],0) AS 'HNS',ISNULL([5],0) AS 'PTE',ISNULL([6],0) AS 'EOC',ISNULL([7],0) AS 'MU'
FROM
(
SELECT PF.FeatureId,PF.Sequence,PF.[Description],PTB.BenefitId,
FROM PSP.table1 PF
LEFT JOIN PSP.table2 PTB ON PF.FeatureId = PTB.FeatureId
left JOIN PSP.table3 PO ON PO.productID = PF.productId
WHERE PF.ProductId = @ProductId AND PF.IsDeleted = 0
) PS
PIVOT
(
MAX (BenefitId)
FOR BenefitId IN
([1],[2],[3],[4],[5],[6],[7])
) AS pvt
ORDER BY colSequence
Зачем использовать ПО в подзапросе? Его поля не используются при выборе –
Опубликуйте план выполнения. Что такое 'индексы', доступные в' table 1,2 & 3' –
Вы можете попробовать запустить SQL на этой странице, чтобы увидеть, отсутствуют ли у вас какие-либо индексы (и если да, какое влияние они окажут на производительность) : http://www.mikesknowledgebase.com/pages/SQLServer/FindingMissingIndexes.htm –