0
我已經給出了一個任務來優化下面的SQL查詢。目前它表現糟糕。我爲它運行了執行計劃,並且我看到它正在執行羣集索引掃描,並且其成本非常高。我怎樣才能降低成本或可以改變它使用索引搜索呢?羣集索引成本高使用SQL查詢
SELECT TOP 20 CustomerPrimaryExtID,
Max(POSTimeStamp) AS TransactionDate,
ExtLocationCode,
0 AS RedemptionAmount,
0 AS RedemptionCount,
TerminalNum,
LogixTransNum,
POSTransNum AS TransNum,
0 AS DetailRecords,
CustomerTypeID,
PresentedCustomerID,
PresentedCardTypeID,
HHID,
Replayed,
0 AS TransContext,
isnull(TransTotal, 0) AS TransTotal
FROM TransHist AS TH WITH(nolock)
WHERE (((CustomerPrimaryExtID IN ('')
AND HHID IS NULL)
OR HHID = '0000000250000013408'
AND CustomerTypeID <> 1)
OR (CustomerPrimaryExtID = '0000000250000013408'
AND CustomerTypeID = 1))
AND NOT EXISTS (SELECT LogixTransNum
FROM TransRedemption AS TR2 with(nolock)
WHERE (((CustomerPrimaryExtID IN ('')
AND HHID IS NULL)
OR HHID = '0000000250000013408'
AND CustomerTypeID <> 1)
OR (CustomerPrimaryExtID = '0000000250000013408'
AND CustomerTypeID = 1))
AND TH.LogixTransNum = TR2.LogixTransNum)
GROUP BY CustomerPrimaryExtID,
HHID,
CustomerTypeID,
PresentedCustomerID,
PresentedCardTypeID,
LogixTransNum,
POSTransNum,
TerminalNum,
ExtLocationCode,
Replayed,
TransTotal
ORDER BY TransactionDate DESC
沒有付出任何真正的努力來查看您的查詢......每當我看到一個緩慢的查詢使用'OR',我嘗試使用'UNION'。您需要確定您嘗試使用哪些索引,並找出它們未被使用的原因(或者在必要時創建它們) –
緩慢索引的碎片級別是什麼? – Volvox