Текущее время: Пт, авг 01 2025, 15:01

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: inner join нескольких таблиц, порядок обработки
СообщениеДобавлено: Ср, апр 15 2009, 16:03 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Удав, и шо?
Вы выберите не count, а trdoc и vrsio, которые нужны для дальнейшего джойна.
И посмотрите не добавились ли в план строки вида:
TABLE ACCESS BY INDEX ROWID
;)

Выигрыша по скорости не будет. Скорее наоборот. Продолжаю считать что разбиение приведенного автором индекса бессмысленно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: inner join нескольких таблиц, порядок обработки
СообщениеДобавлено: Ср, апр 15 2009, 16:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Артем, попробуйте сами ;)
Code:
SQL Statement                                                                       
                                                                                   
SELECT                                                                             
  *                                                                                 
FROM                                                                               
  "ARFCSSTATE"                                                                     
WHERE                                                                               
  ( "ARFCSTATE" = :1 OR     "ARFCFNAM" = :2 )   AND "ARFCRESERV" LIKE :3                                                                                               
                                                                                   
Execution Plan                                                                     

SELECT STATEMENT                                                                   
     5  5 CONCATENATION                                                             
         5  2 TABLE ACCESS BY INDEX ROWID ARFCSSTATE                               
                1 INDEX RANGE SCAN ARFCSSTATE~03                                   
                  Search Columns: 1                                                                                                                         
         5  4 TABLE ACCESS BY INDEX ROWID ARFCSSTATE                               
                3 INDEX RANGE SCAN ARFCSSTATE~01                                   
                  Search Columns: 1                                                 


Если в примере yes делать выборку не по 2-му, а по 3-му полю индекса, будет не INDEX RANGE SCAN, а INDEX SKIP SCAN.
Только не говорите, что SIKP SCAN быстрее :D

yes написала:
SELECT DISTINCT *
INTO ...
FROM tab1
INNER JOIN tab2 ON tab2~trdoc = tab1~trdoc
INNER JOIN tab3 ON tab3~trdoc = tab1~trdoc
AND tab3~vrsio = tab1~vrsio
WHERE tab1~rfcdest = Constanta
AND ( ( tab1~send_status IN ('E', 'S', 'W', '') ) OR ( tab1~answer_status IN ('E', 'W', '') ) ) .

Приведите полные списки полей в индексах
.
tab1:
-Первичный ключ (trdoc, vrsio)
-Индекс(rfcdest+send_status+answer_status )

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: inner join нескольких таблиц, порядок обработки
СообщениеДобавлено: Ср, апр 15 2009, 16:29 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Удав, ну где там будет SKIP SCAN то?
При
Code:
WHERE tab1~rfcdest = Constanta
AND ( ( tab1~send_status IN ('E', 'S', 'W', '') ) OR ( tab1~answer_status IN ('E', 'W', '') ) ) .

и
Цитата:
Индекс(rfcdest+send_status+answer_status)

увидим ровно такой же RANGE SCAN.

Если заменить на
Цитата:
Индекс(rfcdest+send_status)
Индекс(fcdest+answer_status)

разницы не будет.

Если же из таблицы1 нам кроме rfcdest, send_status, answer_status, trdoc и vrsio ничего не надо, то
Цитата:
Индекс(rfcdest+send_status+answer_status+trdoc+vrsio)

позволит нам избежать TABLE ACCESS BY INDEX ROWID. А это доп. дисковая операция, между прочим.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: inner join нескольких таблиц, порядок обработки
СообщениеДобавлено: Ср, апр 22 2009, 14:47 
Ассистент
Ассистент

Зарегистрирован:
Ср, апр 15 2009, 11:39
Сообщения: 26
Откуда: Москва
Пол: Женский
Для определения приоритета помог хинт (источник нота 772497)
%_HINTS ORACLE 'LEADING("&TABLE 1&")'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB