powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / "конкретный" вопрос
10 сообщений из 10, страница 1 из 1
"конкретный" вопрос
    #32126540
nevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
        rpt_tv.rpa_tvtitle as tv_title,
        to_char(rpt_tv.rpa_tvstart,'HH24:MI') as tv_start,
        to_char(rpt_tv.rpa_tvstart- 1 / 6 ,'YYYY.MM.DD') as tv_date,
        rpt_tv.rpa_tvstart- 1 / 6  as temp_start,
        rpt_tv.rpa_tvdescr as tv_descr,
        rpt_tvchannels.rpa_tvcid as ch_id,
        rpt_tvchannels.rpa_tvcname as ch_name
from
        rpt_tv,
        rpt_tvchannels
where
        rpt_tv.rpa_tvchannel = rpt_tvchannels.rpa_tvcid 
        and ((trunc(rpt_tv.rpa_tvstart- 1 / 6 ,'DD') = to_date('10.03.2003','DD.MM.YYYY'))) 
        and ((rpt_tv.rpa_tvchannel = '3') or (rpt_tv.rpa_tvchannel = '7') or (rpt_tv.rpa_tvchannel = '22') or (rpt_tv.rpa_tvchannel = '32') or (rpt_tv.rpa_tvchannel = '35') or (rpt_tv.rpa_tvchannel = '38') or (rpt_tv.rpa_tvchannel = '49') or (rpt_tv.rpa_tvchannel = '51') or (rpt_tv.rpa_tvchannel = 'ntvt') or (rpt_tv.rpa_tvchannel = 'ort') or (rpt_tv.rpa_tvchannel = 'ptp')) 
        order by tv_date,ch_id,temp_start


explain дает table access full по обеим таблицам. Есть ли возможность как-нить ускорить выполнение, учитывая что есть order by? И вообще в присутствии order by, or и всяких функций типа trunc имеет смысл использовать индексы или нет?
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126567
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>explain дает table access full по обеим таблицам. Есть ли возможность как-
>нить ускорить выполнение, учитывая что есть order by? И вообще в
>присутствии order by, or и всяких функций типа trunc имеет смысл
>использовать индексы или нет?

почему бы не создать function-based индекс если он будет избирательным?

что касается order by, то индекс будет использоваться только в случае однотабличного запроса.
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126573
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При наличии индексов:
create index rpt_tv_tvchannel on rpt_tv(rpa_tvchannel);
create index rpt_tv_tvstart on rpt_tv(rpa_tvstart);
create index rpt_tvchannels_tvcid on rpt_tvchannels(rpa_tvcid);
и собранной статистике можно изменить запрос так:
select
rpt_tv.rpa_tvtitle as tv_title,
to_char(rpt_tv.rpa_tvstart,'HH24:MI') as tv_start,
to_char(rpt_tv.rpa_tvstart-1/6,'YYYY.MM.DD') as tv_date,
rpt_tv.rpa_tvstart-1/6 as temp_start,
rpt_tv.rpa_tvdescr as tv_descr,
rpt_tvchannels.rpa_tvcid as ch_id,
rpt_tvchannels.rpa_tvcname as ch_name
from
rpt_tv,
rpt_tvchannels
where
rpt_tv.rpa_tvchannel = rpt_tvchannels.rpa_tvcid
and rpt_tv.rpa_tvstart between to_date('10.03.2003','DD.MM.YYYY')+1/6 and to_date('10.03.2003','DD.MM.YYYY')+1/6-1/(24*60*60)
and rpt_tv.rpa_tvchannel in ('3','7', '22','32','35','38','49','51','ntvt','ort','ptp')
order by tv_date,ch_id,temp_start
Если план выполнения не устроит то дополнительно можно поиграться с хинтами
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126577
nevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а разве IN выполняется быстрее чем OR?
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126586
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>а разве IN выполняется быстрее чем OR?

все зависит от плана выполнения, т.к. оптимизатор иногда сам преобразует IN в OR, и т.к. при этом таблица-источник читается много раз, то рез-тат может быть гораздо хуже.
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126592
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работать IN будет скорее всего так же (см. ответ dba) зато запрос выглядит симпатичнее
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126594
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно будет оправдан bitmap-индекс на rpt_tv.rpa_tvchannel
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126618
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то ораклоиды говорили, что in и куча or'ов - эквивалентные конструкции (просто in транслируется в цепочку or). Может, в 9 что-то изменилось...
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126696
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-моему ничего, да и что может изменится в булевой логике :-))
...
Рейтинг: 0 / 0
"конкретный" вопрос
    #32126700
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Когда-то ораклоиды говорили, что in и куча or'ов - эквивалентные
>конструкции (просто in транслируется в цепочку or). Может, в 9 что-то
>изменилось...

чтоб не транслировалось надо добавлять хинт no_expand. В 8i так по крайней мере.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / "конкретный" вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]