Текущее время: Пн, авг 04 2025, 10:42

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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