Эффективный механизм извлечения rownum - PullRequest
0 голосов
/ 08 ноября 2011

Быстрый здесь. Поэтому я читаю о rownum по всему Интернету и пытаюсь увидеть
какой способ назвать это лучше, так как на основе SQL Optimizer оба подхода показывают
без разницы.

select count(distinct BCC || '~' || BN) BCCN 
from LINK_TBL 
where AN = 'abcdefg' 
and BR = 1 
and rownum <= 5;

или

select count(distinct BCCN)
from (
select BCC||'~'|| BN BCCN 
from LINK_TBL 
where AN = 'abcdefg' and BR = '1'
)
where rownum <= 5;

Ответы [ 2 ]

5 голосов
/ 08 ноября 2011

Оптимизатор может решить вопрос / реорганизовать ваш запрос так, как считает нужным, при условии, что он обеспечивает правильные результаты.Если вы проверите план объяснения, вы можете найти их идентичными.

1 голос
/ 08 ноября 2011

Я подозреваю, что вам не хватает значения order by при использовании rownum.Размещенные вами два запроса функционально эквивалентны.Однако следующие два запроса не являются:

select count(distinct BCC || '~' || BN) BCCN 
from LINK_TBL 
where AN = 'abcdefg' 
and BR = 1 
and rownum <= 5
order by BCC || '~' || BN;

select count(distinct BCCN)
from (
select BCC||'~'|| BN BCCN 
from LINK_TBL 
where AN = 'abcdefg' and BR = '1'
order by BCC || '~' || BN
)
where rownum <= 5;

Разница в том, что первый запрос получает все строки в указанном порядке, затем занимает первые 5 строк, а второй запрос получает 5 строксортирует только те 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...