У нас есть хранимая процедура, которая выполняется против некоторых довольно больших таблиц, а при соединении с большой таблицей также хранится количество записей, соответствующих соответствующему batch_id. Я пытаюсь выяснить, могу ли я улучшить это с помощью функции для подсчета или других средств? Попытка избавиться от вложенного оператора SELECT COUNT (*). Таблица CCTransactions - 1,4 миллиона строк, а BatchItems - 6,6 миллионов строк.подсчет элементов, которые совпадают в выражении select
SELECT a.ItemAuthID, a.FeeAuthID, a.Batch_ID, a.ItemAuthCode,
a.FeeAuthCode, b.Amount, b.Fee,
(SELECT COUNT(*) FROM BatchItems WHERE Batch_ID = a.Batch_ID) AS BatchCount,
ItemBillDate, FeeBillDate, b.AccountNumber,
b.Itemcode, ItemAuthToken, FeeAuthToken,
cc.ItemMerchant, cc.FeeMerchant
FROM CCTransactions a WITH(NOLOCK)
INNER JOIN BatchItems b WITH(NOLOCK)
ON a.Batch_ID = b.Batch_ID
INNER JOIN CCConfig cc WITH(NOLOCK)
ON a.ClientCode = cc.ClientCode
WHERE ((ItemAuthCode > '' AND ItemBillDate IS NULL)
OR (FeeAuthCode > '' AND FeeBillDate IS NULL))
AND TransactionDate BETWEEN DATEADD(d,-7,GETDATE())
AND convert(char(20),getdate(),101) + ' ' + @Cutoff
ORDER BY TransactionDate
Просто, чтобы добавить это в стандартной версии SQL Server 2005. – joshobud
Я проверил COUNT (*) OVER и, хотя это уменьшило количество просмотров в пределах SET STATISTICS IO ON, это увеличило стоимость поддерева плана. Итак, теперь позвольте мне проверить INNER JOIN подзапроса и посмотреть, как это работает. – joshobud