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

Откуда:
Сообщений: 124
select * from t1
where owner = (select max(owner) from t1)
23 янв 07, 14:21    [3680826]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
arhey
Member

Откуда: Санкт-Петербург. Россия... :)
Сообщений: 221
поищите по форму
keep
23 янв 07, 14:23    [3680851]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116213
Буквально вчера обсуждали

Еще раз, keep в общем случае не подходит.
(Хотя бы потому, что вернет всего лишь одну строку).

dense_rank.

Но вопрос о том, оптимизация ли это, остается открытым.
Смотрите анализ "я и ёжик"-a в теме из ссылки.
23 янв 07, 14:28    [3680882]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
SELECT *
  FROM (SELECT t1.*
             , ROW_NUMBER () OVER (ORDER BY owner) rn
          FROM t1)
 WHERE rn <= 1
23 янв 07, 14:28    [3680885]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
dmidek
Но вопрос о том, оптимизация ли это, остается открытым.

+1
23 янв 07, 14:29    [3680891]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
Elic
Member

Откуда:
Сообщений: 29988
pailex
select * from t1 where owner = (select max(owner) from t1)
Уникален ли и проидексирован ли owner?
23 янв 07, 14:30    [3680902]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
Elic
Уникален ли и проидексирован ли owner?

Телепатирую - это будет следующий топик автора.
23 янв 07, 14:36    [3680958]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
pailex
Member

Откуда:
Сообщений: 124
Elic
pailex
select * from t1 where owner = (select max(owner) from t1)
Уникален ли и проидексирован ли owner?

уникальный ключ
23 янв 07, 14:38    [3680980]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
Elic
Member

Откуда:
Сообщений: 29988
pailex
Elic
pailex
select * from t1 where owner = (select max(owner) from t1)
Уникален ли и проидексирован ли owner?
уникальный ключ
select * from (select * from t1 order by /*nlssort(*/owner/*, 'BINARY')*/ desc) where rownum = 1
23 янв 07, 14:45    [3681045]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
arhey
Member

Откуда: Санкт-Петербург. Россия... :)
Сообщений: 221
dmidek
Буквально вчера обсуждали

Еще раз, keep в общем случае не подходит.
(Хотя бы потому, что вернет всего лишь одну строку).

dense_rank.

Но вопрос о том, оптимизация ли это, остается открытым.
Смотрите анализ "я и ёжик"-a в теме из ссылки.


Спасибо за ссылку.
Именно к такому запросу согласен. Я скорее имел ввиду оптимизацию написания запроса, когда нужно получить поля, с сортировкой по другому полю... :))
Наверное невнимательность.

Автору извинения.
23 янв 07, 14:47    [3681057]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116213
arhey
dmidek
Буквально вчера обсуждали

Еще раз, keep в общем случае не подходит.
(Хотя бы потому, что вернет всего лишь одну строку).

dense_rank.

Но вопрос о том, оптимизация ли это, остается открытым.
Смотрите анализ "я и ёжик"-a в теме из ссылки.


Спасибо за ссылку.
Именно к такому запросу согласен. Я скорее имел ввиду оптимизацию написания запроса, когда нужно получить поля, с сортировкой по другому полю... :))
Наверное невнимательность.

Автору извинения.


Не торопитесь.
С учетом того, что owner - уникальный ключ, keep (first/last) тоже можно.
23 янв 07, 14:49    [3681080]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
Oleg Afanasiev
Member

Откуда: Киев
Сообщений: 3742
pailex
Elic
pailex
select * from t1 where owner = (select max(owner) from t1)
Уникален ли и проидексирован ли owner?

уникальный ключ


order by owner desc
...
where rownum=1

:))

ps.
орграф забыл сделать desc ;_)
23 янв 07, 14:54    [3681120]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
arhey
Member

Откуда: Санкт-Петербург. Россия... :)
Сообщений: 221
я просто слишком долго писал ответ :))
23 янв 07, 14:55    [3681137]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
pailex
Member

Откуда:
Сообщений: 124
спасибо всем,
Наверное я немного неправильно написал тему.
Мне хотелось увидеть другие способы написании этого запроса - и услышал. Спасибо.
Теперь буду мучать планы и смотреть как лучше в конкретной ситуации.
23 янв 07, 14:59    [3681173]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
Oleg Afanasiev

ps.
орграф забыл сделать desc ;_)

Точно. Спасибо большое, Олег!
ЗЫ. Век живи - век учись!
23 янв 07, 15:03    [3681218]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
Elic
Member

Откуда:
Сообщений: 29988
dmidek
Не торопитесь.
С учетом того, что owner - уникальный ключ, keep (first/last) тоже можно.
Как сказать
SQL> create table tmp as select level as id, -level as n, rpad(level, 2000, level) as s from  dual connect by level <= 10000

Table created.

SQL> alter table tmp add constraint tmp$pk primary key(id);

Table altered.

SQL> exec dbms_stats.gather_table_stats(user, 'TMP')

PL/SQL procedure successfully completed.

SQL> set autot trace
SQL> set timing on
SQL> select * from (select * from tmp order by id desc) where rownum = 1;

1 row selected.

Elapsed: 00:00:00.01

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=826 Card=1 Bytes=1028)
   1    0   COUNT (STOPKEY)
   2    1     VIEW (Cost=826 Card=10000 Bytes=10280000)
   3    2       TABLE ACCESS (BY INDEX ROWID) OF 'TMP' (Cost=826 Card=10000 Bytes=20090000)
   4    3         INDEX (FULL SCAN DESCENDING) OF 'TMP$PK' (UNIQUE) (Cost=26 Card=10000)

Statistics
----------------------------------------------------------
         57  recursive calls
          0  db block gets
         16  consistent gets
          2  physical reads
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select max(id), min(n) keep (dense_rank last order by id) from tmp;

1 row selected.

Elapsed: 00:00:00.14

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=980 Card=1 Bytes=9)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'TMP' (Cost=980 Card=10000 Bytes=90000)

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      10008  consistent gets
       7328  physical reads
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

23 янв 07, 17:18    [3682352]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116213
Elic
dmidek
Не торопитесь.
С учетом того, что owner - уникальный ключ, keep (first/last) тоже можно.
Как сказать


Elic, ключевое слово - "можно".
Насколько я понял, после моего первого поста arhey стал сомневаться в том, что keep вернет верные результаты и в этом конкретном случае.
23 янв 07, 17:23    [3682390]     Ответить | Цитировать Сообщить модератору
 Re: как можно оптимизироват запрос  [new]
Elic
Member

Откуда:
Сообщений: 29988
dmidek
Elic, ключевое слово - "можно".
Да я понимаю. В какой-то степени я это делал для себя лично :) Для закрепления поданного ёжиками материала, так сказать.
dmidek
Насколько я понял, после моего первого поста arhey стал сомневаться в том, что keep вернет верные результаты и в этом конкретном случае.
А мне в его "сомнениях" и в теме слово "оптимизация" заслонило всё остальное.
23 янв 07, 18:44    [3682967]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить