Я изучаю способы оптимизации следующего запроса, который использует много подзапросов, потому что они имеют тенденцию ухудшать скорость запроса. Хотя следующий запрос работает нормально, он завершается примерно через 6 секунд, что неприемлемо. Он ищет таблицу около 500 тыс. Клиентов. Есть идеи?Оптимизация запроса, написанного несколькими подзапросами
SELECT (
(SELECT coalesce(SUM(cashout),0)-
((select coalesce(sum(Buyin),0) from [Transaction] where TYPE='Credit' and CustomerID=132)
+ (select coalesce(sum(Paid),0) from [Transaction] where TYPE='Credit' and CustomerID=132))
FROM [transaction]
WHERE TYPE='Credit'
AND CustomerID=132
)
-------------------
+
(
(SELECT coalesce(SUM(cashout),0)
- (select coalesce(sum(Paid),0) from [Transaction] where TYPE='Debit' AND Cashout>buyin and CustomerID=132)
+ (select coalesce(sum(Cashout),0)- (select coalesce(sum(PAID),0) from [Transaction] where TYPE='Debit' AND Cashout<buyin and CustomerID=132)
from [Transaction] where TYPE='Debit' AND Cashout<Buyin and CustomerID=132)
+ (select coalesce(sum(Cashout),0)- (select coalesce(sum(PAID),0) from [Transaction] where TYPE='Debit' AND Cashout=buyin and CustomerID=132)
from [Transaction] where TYPE='Debit' AND Cashout=Buyin and CustomerID=132)
FROM [Transaction]
WHERE CustomerID=132
AND TYPE='Debit'
AND Cashout>buyin)
)
--------------
-
(
select coalesce(sum(Paid),0)
from [Transaction]
where type='Debit Settlement'
AND CustomerID =132
)
--------------
+
(
select coalesce(sum(Paid),0)
from [Transaction]
where type='Credit Settlement'
AND CustomerID =132
)
);
Вы, вероятно, можете объединить все их в один основной запрос и избавиться от подзапросов с, например, 'SELECT SUM (CASE WHEN типа =«Кредитное Урегулирование»И CustomerID = 132 THEN Paid END)' и т.д. , –
Спасибо! Это тоже помогло. @MartinSmith –