Производительность использования курсора PLSQL - PullRequest
0 голосов
/ 10 марта 2020

Я должен получить счет с помощью курсора. курсор basi c равен

get *
from table

Здесь есть три типа данных, для которых я хочу получить счет.

sysdate < start_date
sysdate > startdate and sysdate < enddate
sysdate > enddate

У меня есть 2 способа сделать это.

  1. L oop указанным выше курсором и используйте условие if для получения счетчиков.

  2. Создайте 3 отдельных курсора с условиями и сразу получите количество

Поскольку у меня много данных, какой путь будет хорошим с точки зрения производительности?

1 Ответ

2 голосов
/ 10 марта 2020
Не использовать курсор вообще.

Использовать условное агрегирование. Это почти наверняка быстрее, чем любой подход на основе курсора.

SELECT count(CASE
               WHEN sysdate < start_date THEN
                 1
             END) count1,
       count(CASE
               WHEN sysdate > startdate
                    AND sysdate < enddate THEN
                 1
             END) count2,
       count(CASE
               WHEN sysdate > enddate THEN
                 1
             END) count3
       FROM elbat;
...