Текущее время: Ср, апр 24 2024, 13:19

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: быстродействие SQL
СообщениеДобавлено: Вт, авг 24 2004, 13:34 
Гость
Рассмотрим пример запроса
SELECT vbak~vbeln vbak~erdat vbak~ernam vbak~kvgr5 vbak~objnr
vbak~netwr vbak~waerk
kna1~name1 kna1~kunnr
adrc~city1 vbkd~bstdk vbkd~bstkd
vbpa~kunnr AS kunwe
FROM vbak INNER JOIN kna1 ON vbak~kunnr = kna1~kunnr
INNER JOIN adrc ON kna1~adrnr = adrc~addrnumber
**** INNER JOIN vbuk ON vbak~vbeln = vbuk~vbeln
INNER JOIN vbkd ON vbkd~vbeln = vbak~vbeln
AND vbkd~posnr = '000000'
INNER JOIN vbpa ON vbpa~vbeln = vbak~vbeln
AND parvw = 'WE'
INTO CORRESPONDING FIELDS OF TABLE rt_outtab
WHERE vbak~erdat IN erdat AND
( vbak~vbtyp = 'C' OR vbak~vbtyp = 'A' OR vbak~vbtyp = 'H' ) AND
vbak~ernam IN ernam AND
vbak~kunnr IN kunnr AND
*** vbuk~gbstk NE 'C' AND
vbkd~bstdk IN bstdk AND
adrc~date_from LE sy-datum AND
adrc~date_to GE sy-datum.

вопросы :
1)имеет ли преимущество такой запрос перед конструкцией
select * from vbak .....
select single * .....
......
endselect .
2) подхватится ли при этом индекс (vbak~erdat)

спасибо заранее всем ответившим


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 24 2004, 14:07 
Гость
На второй вопрос сможет ответить только транзакция ST04 :P


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 24 2004, 14:27 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
На второй вопрос может ответить ещё и транзакция ST05.
А что касается джойна по 5-ти таблицам... Наверное, его лучше разбить. Но только не через вложенный селект. А лучше воспользоваться конструкцией for all entries, или подзапросами, или и тем и другим.
И вообще нагрузить application server :) .


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: быстродействие SQL
СообщениеДобавлено: Ср, авг 25 2004, 16:17 
Гость
1) select .. endselect - вредоносная конструкция, и от нее нужно отказаться в принципе.
2) заджойнить всегда быстрее, чем потом в loop-е по внутренней таблице делать select single.
3) что касается оптимизации времени выполнения вообще - это отдельная тема, есть много нюансов, и даже то, что я знаю и использую, будет перечислять долго. по поводу селектов мое мнение - старайтесь делать селектов чем поменьше, группируя по максимуму. В join-ах используйте ключи, и все будет нормально. А кроме того, помимо джойнов есть немало интересных конструкций, вот EGF про то же говорил - но это уже смотрите по ситуации......

4) что касается конкретной выборки, отвлекаясь немного от темы:
'INNER JOIN adrc ON kna1~adrnr = adrc~addrnumber' - это профанация, берите adrnr, и потом используйте функцию ADDR_GET (вспомните про sy-langu).


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

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


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

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


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

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