In case you have your own slow SQL query, you can optimize it automatically here.
For the query above, the following recommendations will be helpful as part of the SQL tuning process.
You'll find 3 sections below:
CREATE INDEX bmt_businessrulece_idx_businessrulesegmentid ON BMT_BusinessRuleCell (BusinessRuleSegmentID);
CREATE INDEX bmt_businessrulece_idx_businessrulecellid ON BMT_BusinessRuleCellOption (BusinessRuleCellId);
CREATE INDEX bmt_businessrulecr_idx_businessrulecriteriaid ON BMT_BusinessRuleCriteria (BusinessRuleCriteriaID);
CREATE INDEX bmt_businessrulese_idx_businessrulecriteriaid ON BMT_BusinessRuleSegment (BusinessRuleCriteriaID);
CREATE INDEX bmt_businessrulese_idx_businessrulesegmentid ON BMT_BusinessRuleSegmentTag (BusinessRuleSegmentID);
SELECT
ESTable.[BusinessRuleCriteriaID],
ESTable.[ItemType],
ESTable.[tag],
ESTable.[TagValue],
ESTable.Operator,
[ESSubTag],
ESTable.[ES01],
ESTable.[ES02],
ESTable.[ES03],
ESTable.[ES04],
ESTable.[ES05],
ESTable.[ES06],
ESTable.[ES07],
ESTable.[ES08],
ESTable.[ES09],
ESTable.[ES10],
ESTable.[ES11],
ESTable.[ES12],
ESTable.[ITMSubTag],
ESTable.[ITM01],
[RR4SubTag],
ESTable.[RR401],
ESTable.[RR402]
FROM
(SELECT
DISTINCT crit.BusinessRuleCriteriaID,
crit.ItemType,
crit.tag,
crit.TagValue,
crit.Operator,
CASE
WHEN seg.SegmentType = 'ES' THEN SegSubTags.list END AS [ESSubTag],
CASE
WHEN seg.SegmentType = 'ITM' THEN SegSubTags.list END AS [ItemSubTag],
CASE
WHEN seg.SegmentType = 'RR4' THEN SegSubTags.list END AS [RR4SubTag],
c.CellName AS [SegmentId],
CASE
WHEN c.CellValue IS NOT NULL
AND len(c.CellValue) > 0 THEN c.CellValue
ELSE ItemTagDescriptions.list END AS [Tags]
FROM
BMT_BusinessRuleCriteria crit
LEFT OUTER JOIN
BMT_BusinessRuleSegment seg
ON seg.BusinessRuleCriteriaID = crit.BusinessRuleCriteriaID
LEFT OUTER JOIN
BMT_BusinessRuleCell c
ON c.BusinessRuleSegmentID = seg.BusinessRuleSegmentID
LEFT OUTER JOIN
BMT_BusinessRuleCellOption MT
ON c.BusinessRuleCellId = MT.BusinessRuleCellId
OUTER APPLY (SELECT
IsNull(MT2.Tag,
'{Unknown}') + ISNULL('=' + MT.TagValue,
'') + ':' + IsNull(MT.CellValue,
'') + ';' AS [text()] FROM
BMT_BusinessRuleCellOption MT
WHERE
MT.BusinessRuleCellId = MT.BusinessRuleCellId
ORDER BY
MT.BusinessRuleCellId FOR XML PATH('')) ItemTagDescriptions(list)
OUTER APPLY (SELECT
IsNull(SegSubTag.Tag,
'{Unknown}') + ' ' + ISNULL(SegSubTag.Operator,
'') + ' ' + IsNull(SegSubTag.TagValue,
'') + ';' AS [text()] FROM
BMT_BusinessRuleSegmentTag SegSubTag
WHERE
SegSubTag.BusinessRuleSegmentID = seg.BusinessRuleSegmentID
ORDER BY
SegSubTag.BusinessRuleSegmentID FOR XML PATH('')) SegSubTags(list)
WHERE
crit.BusinessRuleCriteriaID = 489302
) AS ESTable PIVOT (max([Tags]) FOR [SegmentId] IN ([ES01], [ES02], [ES03], [ES04], [ES05], [ES06], [ES07], [ES08], [ES09], [ES10], [ES11], [ES12], [ITM01], [RR401], [RR402])) AS ESPivotTable