Нижеследующий внутренний SELECT возвращает огромное количество строк (1000000+), а внешние SELECT (альфа BETWEEN # startRec # AND # endRec #) используются для PAGINATION
для отображения данных с 25 на каждой странице.
Проблема заключается в следующем: -Эта страница, выполненная ниже, очень медленная и замедляет весь процесс отображения данных. Так что, пожалуйста, помогите мне сделать это ниже.
нумерация страниц в лучшем способе? Код о нумерации страниц был бы лучшим.
** Мне очень жаль говорить об этом, но я очень плохо знаком с концепциями нумерации страниц и поэтому нуждаюсь в вашей помощи.
/*********ORIGINAL QUERY ****/
SELECT
*
FROM
(
SELECT
beta.*, rownum as alpha
FROM
(
SELECT
p.lastname, p.firstname, porg.DEPARTMENT,
porg.org_relationship,
porg.enterprise_name,
(
SELECT
count(*)
FROM
test_person p, test_contact c1, test_org_person porg
WHERE
p.p_id = c1.ref_id(+)
AND p.p_id = porg.o_p_id
$where_clause$
) AS results
FROM
test_person p, test_contact c1, test_org_person porg
WHERE
p.p_id = c1.ref_id(+)
AND p.p_id = porg.o_p_id
$where_clause$
ORDER BY
upper(p.lastname), upper(p.firstname)
) beta
)
WHERE
alpha BETWEEN #startRec# AND #endRec#
Моя проверенная реализация ниже
(1) Самый внутренний запрос ... это первый запрос, извлекающий данные.
(2) Затем, мы делаем общий подсчет на вышеуказанных данных.
Теперь главная проблема - выполнение запроса продолжается вечно ... и, наконец, я вынужден принудительно отменить его.
Я чувствую, что в приведенном ниже запросе чего-то не хватает, для чего это зависает.
Кроме того, я узнал, что использование COUNT вне системы - это лучший подход к производительности. Итак, не могли бы вы исправить приведенный ниже запрос, чтобы я мог вернуть COUNT
*** ДАННЫЕ с использованием пагинации, rownum и т. Д. В основном с псевдонимами ниже, rownum и получением данных.
select * from
( select x.* ,rownum rnum
from ( SELECT
count(*) as results /****2nd QUERY is OUTSIDE to get total count**/
Вопрос здесь, как мне получить доступ к данным, выбранным в 1-м запросе ниже
from ( /****1st query to SELECT data***/
SELECT
p.lastname, p.firstname, porg.DEPARTMENT,
porg.org_relationship,
porg.enterprise_name
FROM
t_person p, t_contact c1, t_o_person porg
WHERE rownum <10
and
p.person_id = c1.ref_id(+)
AND p.person_id = porg.o_person_id
ORDER BY
upper(p.lastname), upper(p.firstname)
) y ------------------>alias defined Y from data of the 1st query
)x ------------------>alias defined X
where rownum <= 20 )
where rnum >= 1