Posted: Wed Jan 14, 2009 3:25 pm Post subject: Условие в Where или в JOIN?
Здравствуйте, как правильнее по скорости или все равно?
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').
Age: 180 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Wed Jan 14, 2009 5:28 pm Post subject:
В моей системе (MSSQL), несмотря на внешнюю похожесть планов выполнения запроса второй на 30% быстрее первого (независимо от того, какой запрос выполнялся первым).
Joined: 21 Nov 2008 Posts: 25 Location: СПб - Валлдорф
Posted: Wed Jan 14, 2009 6:23 pm Post subject:
План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть. Хотя в безиндексном варианте оба должны быть идентичны, а я лично придерживаюсь первой нотификации.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Jan 15, 2009 9:12 am Post subject: Re: Условие в Where или в JOIN?
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 план обеих запросов. И все встанет на свои места
ЗЫ: Только лучше это делать в системе, в которой достаточно много данных.
ЗЗЫ: По поводу быстродействия: попробуйте поменять запросы местами и посмотрите, что получится. _________________ С уважением,
Удав.
Last edited by Удав on Thu Jan 15, 2009 9:14 am; edited 1 time in total
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Jan 15, 2009 9:14 am Post subject:
menx wrote:
План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть.
Вообще-то для lfb1 LIFNR+BUKRS - первичный ключ _________________ С уважением,
Удав.
Joined: 21 Nov 2008 Posts: 25 Location: СПб - Валлдорф
Posted: Thu Jan 15, 2009 1:08 pm Post subject:
Удав wrote:
menx wrote:
План запросов зависит от наличия подходящего индекса. Если существует индекс по комбинации LIFNR и BUKRS, то лучше использовать первый, если нет, то опять же в зависимости от того какие еще индексы есть.
Вообще-то для lfb1 LIFNR+BUKRS - первичный ключ
Я, к сожалению не спец в этих таблицах, но раз это первичный ключ, то мой взгляд по теории первый однозначно должен выполняться быстрее.
И правильно говорят, посмотрите план но на большом массиве данных
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.