Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
Знаю, что тема избита. Но я столкнулся с реальной проблемой. В базе данных есть поля: "Страна", "Регион", "Город" и т.п. Каждое из них содержит значение из справочника. Не знаю, почему, но использование rownum дает хороший по времени результат только в том случае, если пользователь ищет в базе записи по полю "Страна". Если введено еще одно уточняющее значение (напр, назв. города), rownum жестко тупит. Использование же Row_number() дает совершенно противоположный результат! Поиск по стране - 5 минут против 7 секунд у rownum'а! Зато по остальным полям - наоборот выигрыш. Собственно вопрос - как так? Перерыл весь инет, не нашел ответа... Буду очень признателен.
13 июл 11, 10:08    [10965774]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
Elic
Member

Откуда:
Сообщений: 29976
PaulWMaster
rownum жестко тупит
Здесь одно слово ошибочно неодушевлённое
RTFM
13 июл 11, 10:18    [10965836]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2852
PaulWMaster,

Не надо рыть так глубоко, начинай с документации.
Посмотри, что такое rownum.
13 июл 11, 10:22    [10965858]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
A.
Guest
опиши проблему детальнее приведи запросы и планы запросов
13 июл 11, 10:28    [10965898]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
Запрос:

SELECT * FROM (SELECT a.CLNT_CLNT_ID as cID,a.NUMBER_HISTORY as hNUM,b.NAME_R as countryNAME,c.DEF as provinceNAME,d.NAME as distrNAME,e.NAME_R as cityNAME,f.NAME_R as streetNAME,a.START_DATE,a.END_DATE,a.NAVI_DATE,a.ZIP,a.ADDRESS,a.REGION,a.AREA,a.CITY,ROW_NUMBER() OVER (ORDER BY CLNT_CLNT_ID, number_history) as rn FROM BIS.JUR_ADDRESSES_LITE a LEFT OUTER JOIN BIS.COUNTRIES b on (a.COU_COU_ID=b.COU_ID) LEFT OUTER JOIN BIS.PROVINCES c on (a.PROV_PROV_ID=c.PROV_ID) LEFT OUTER JOIN BIS.PROV_DISTRICTS d on (a.PRODS_PRODS_ID=d.PRODS_ID) LEFT OUTER JOIN BIS.CITIES e on (a.CIT_CIT_ID=e.CIT_ID) LEFT OUTER JOIN BIS.STREETS f on (a.STRT_STRT_ID=f.STRT_ID) WHERE  CLNT_CLNT_ID*100+NUMBER_HISTORY > 0 and b.cou_id=1) WHERE rownum [b](или rn)[/b] <=20

Пока что не вижу другого выхода кроме как проверять, по каким полям ведет поиск пользователь и в зависимости от этого использовать rownum или rn
13 июл 11, 10:32    [10965921]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
Извиняюсь за длинный текст, никогда раньше здесь не писал.
13 июл 11, 10:33    [10965930]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
PaulWMaster,

SELECT * FROM (SELECT a.CLNT_CLNT_ID as cID,a.NUMBER_HISTORY as hNUM,b.NAME_R as countryNAME,
c.DEF as provinceNAME,d.NAME as distrNAME,e.NAME_R as cityNAME,f.NAME_R as streetNAME,a.START_DATE,
a.END_DATE,a.NAVI_DATE,a.ZIP,a.ADDRESS,a.REGION,a.AREA,a.CITY,
ROW_NUMBER() OVER (ORDER BY CLNT_CLNT_ID, number_history) as rn FROM BIS.JUR_ADDRESSES_LITE a 
LEFT OUTER JOIN BIS.COUNTRIES b on (a.COU_COU_ID=b.COU_ID) 
LEFT OUTER JOIN BIS.PROVINCES c on (a.PROV_PROV_ID=c.PROV_ID) 
LEFT OUTER JOIN BIS.PROV_DISTRICTS d on (a.PRODS_PRODS_ID=d.PRODS_ID) 
LEFT OUTER JOIN BIS.CITIES e on (a.CIT_CIT_ID=e.CIT_ID) 
LEFT OUTER JOIN BIS.STREETS f on (a.STRT_STRT_ID=f.STRT_ID) 
WHERE  CLNT_CLNT_ID*100+NUMBER_HISTORY > 0 and b.cou_id=1) WHERE rownum [b](или rn)[/b] <=20
13 июл 11, 10:34    [10965944]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
A.
Guest
Приведи быстрый запрос и его план, медленный запрос и его план
13 июл 11, 10:36    [10965959]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
A.,

Запросы отличаются только тем, что в первом случае я пишу rownum после WHERE, а во втором - rn
13 июл 11, 10:39    [10965977]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
A.
Guest
Хорошо, два плана запроса тогда
13 июл 11, 10:40    [10965987]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
A.,

Использование rownum:
Картинка с другого сайта.

Использование Row_Number():
Картинка с другого сайта.
13 июл 11, 10:49    [10966063]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
A
Guest
Ничего удивительного В случае с row-number используется сортировка. В случае с rownum нет.
13 июл 11, 11:00    [10966138]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
A,

A
Ничего удивительного В случае с row-number используется сортировка. В случае с rownum нет.


Хорошо. Но почему тогда при таком же плане при выборе помимо "Страны" (b.cou_id=1) других полей (например, "Город") лучший результат показывает, наоборот, Row_number()?
Да, тем более, сортировка в условии стоит в обоих случаях, что видно из кода (ORDER BY...). Так в чем же все-таки причина?
13 июл 11, 11:49    [10966426]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2852
PaulWMaster,

Еще раз.
Иди читай документацию.
Забей на скорость выполнения, для начала пойми, что у тебя два РАЗНЫХ запроса, которые дают РАЗНЫЕ результаты.
Посмотри чем rownum отличается от аналитических функций.
13 июл 11, 12:10    [10966537]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
PaulWMaster
Member

Откуда:
Сообщений: 19
Вроде разобрался, всем, кто помог, спасибо.
13 июл 11, 12:51    [10966790]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
cmddd
Guest
PaulWMaster,

да нихрена ты не разобрался...
13 июл 11, 16:17    [10968546]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше использовать - rownum или row_number?  [new]
OraCCCle
Guest
cmddd,

Так помоги человеку, коль знаешь)))
14 июл 11, 07:11    [10971045]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить