Улучшение хранимой процедуры с несколькими счетами в выходные параметры - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть хранимая процедура, которая возвращает несколько параметров OUT, которые состоят из результатов SELECT COUNT(*) запросов.Приведенный ниже фрагмент кода работает нормально, но кажется медленным.

У меня есть до 30 различных параметров OUT, поэтому это означает, что я выполняю 30 отдельных запросов, поэтому, вероятно, запрос выполняется так медленно.

Есть ли у кого-нибудь предложения о том, как я могу ускорить этот код?

PROCEDURE get_counts(
   count1 OUT INT,
   count2 OUT INT,
   count3 OUT INT,
   .. etc.
) IS 
   l_count1 INT;
   l_count2 INT;
   l_count3 INT;
   .. etc.
BEGIN
   SELECT COUNT(*) INTO l_count1 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count2 from table1 where condition_blah;
   SELECT COUNT(*) INTO l_count3 from table1 where condition_blah;
   ... etc

   count1 := l_count1;
   count2 := l_count2;
   count3 := l_count3;
   .. etc
END get_counts;

1 Ответ

7 голосов
/ 20 сентября 2019

Использовать условную агрегацию:

SELECT SUM(CASE WHEN condition_blah THEN 1 ELSE 0 END),
       SUM(CASE WHEN condition_blah2 THEN 1 ELSE 0 END),
       . . .
INTO l_count1, l_count2, . . . ;
FROM table1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...