SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Условие в Where или в JOIN?



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
corsair
Участник
Участник



Joined: 06 Feb 2008
Posts: 37

PostPosted: Wed Jan 14, 2009 3:25 pm    Post subject: Условие в Where или в JOIN? Reply with quote

Здравствуйте, как правильнее по скорости или все равно?

Code:
  SELECT a~lifnr a~begru a~name1
    INTO TABLE it_vend
    FROM lfa1 AS a
    INNER JOIN lfb1 AS b ON b~lifnr = a~lifnr
                        AND b~bukrs = p_bukrs
    WHERE a~begru IN ('ZVEN', 'ZLOC').

или

Code:
  SELECT a~lifnr a~begru a~name1
    INTO TABLE it_vend
    FROM lfa1 AS a
    INNER JOIN lfb1 AS b ON b~lifnr = a~lifnr
    WHERE b~bukrs = p_bukrs
        AND a~begru IN ('ZVEN', 'ZLOC').
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 180
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Jan 14, 2009 5:28 pm    Post subject: Reply with quote

В моей системе (MSSQL), несмотря на внешнюю похожесть планов выполнения запроса второй на 30% быстрее первого (независимо от того, какой запрос выполнялся первым).
Back to top
View user's profile Send private message Blog Visit poster's website
menx
Участник
Участник



Joined: 21 Nov 2008
Posts: 25
Location: СПб - Валлдорф

PostPosted: Wed Jan 14, 2009 6:23 pm    Post subject: Reply with quote

План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть. Хотя в безиндексном варианте оба должны быть идентичны, а я лично придерживаюсь первой нотификации.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Jan 15, 2009 9:12 am    Post subject: Re: Условие в Where или в JOIN? Reply with quote

corsair wrote:
Здравствуйте, как правильнее по скорости или все равно?

Code:
  SELECT a~lifnr a~begru a~name1
    INTO TABLE it_vend
    FROM lfa1 AS a
    INNER JOIN lfb1 AS b ON b~lifnr = a~lifnr
                        AND b~bukrs = p_bukrs
    WHERE a~begru IN ('ZVEN', 'ZLOC').

или

Code:
  SELECT a~lifnr a~begru a~name1
    INTO TABLE it_vend
    FROM lfa1 AS a
    INNER JOIN lfb1 AS b ON b~lifnr = a~lifnr
    WHERE b~bukrs = p_bukrs
        AND a~begru IN ('ZVEN', 'ZLOC').

Посмотрите в транзакции ST05 план обеих запросов. И все встанет на свои места Smile
ЗЫ: Только лучше это делать в системе, в которой достаточно много данных.
ЗЗЫ: По поводу быстродействия: попробуйте поменять запросы местами и посмотрите, что получится.

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


Last edited by Удав on Thu Jan 15, 2009 9:14 am; edited 1 time in total
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Jan 15, 2009 9:14 am    Post subject: Reply with quote

menx wrote:
План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть.

Вообще-то для lfb1 LIFNR+BUKRS - первичный ключ Wink

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
menx
Участник
Участник



Joined: 21 Nov 2008
Posts: 25
Location: СПб - Валлдорф

PostPosted: Thu Jan 15, 2009 1:08 pm    Post subject: Reply with quote

Удав wrote:
menx wrote:
План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть.

Вообще-то для lfb1 LIFNR+BUKRS - первичный ключ Wink

Я, к сожалению не спец в этих таблицах, но раз это первичный ключ, то мой взгляд по теории первый однозначно должен выполняться быстрее.
И правильно говорят, посмотрите план но на большом массиве данных
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 180
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Jan 15, 2009 3:09 pm    Post subject: Reply with quote

menx wrote:
Я, к сожалению не спец в этих таблицах, но раз это первичный ключ, то мой взгляд по теории первый однозначно должен выполняться быстрее.


Если бы не вклинивался оптимизатор, который может распознать разный синтаксис.
Back to top
View user's profile Send private message Blog Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.