Текущее время: Сб, авг 02 2025, 20:23

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 17 2008, 16:47 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
Подскажите что не так!

Code:
SELECT ZFI_SC_DR~DEKLAR ZFI_SC_DR~GRPVD ZFI_SC_DR~ZNAK
       J_3RKKRS~BUKRS J_3RKKRS~GJAHR  J_3RKKRS~BELNR J_3RKKRS~BUDAT
       J_3RKKRS~DEBET J_3RKKRS~KREDIT J_3RKKRS~DMBTR
INTO CORRESPONDING FIELDS OF TABLE TAB_ITOG
FROM J_3RKKRS
INNER JOIN ZFI_SC_DR ON ( J_3RKKRS~DEBET  = ZFI_SC_DR~DEBET AND
                          J_3RKKRS~KREDIT = ZFI_SC_DR~KREDIT )
WHERE J_3RKKRS~BUKRS eq BUKRS
  and J_3RKKRS~BUDAT in BUDAT
  and ZFI_SC_DR~PRIZNAK eq '1' " Доходы (1) Расходы (2)
  and ZFI_SC_DR~ISDEL   ne 'X'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 17 2008, 16:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Valeriy написал:
Подскажите что не так!
and ZFI_SC_DR~ISDEL ne 'X'.[/code]

Вот это точно надо заменить на расшифрованное обратное условие. Если использован оператор NE, то скорее всего индексы не будут использованы.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 17 2008, 16:55 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
Есть две таблицы:
1) Одна изних настроечная "ZFI_SC_DR" - в ней хранятся счета 2000 записей.

2) Кореспонденция счетов "J_3RKKRS" - 10 000 000 записей

Подскажите как оптимизировать запрос!?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пн, ноя 17 2008, 16:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
Сергей Королев написал:
Valeriy написал:
Подскажите что не так!
and ZFI_SC_DR~ISDEL ne 'X'.[/code]

Вот это точно надо заменить на расшифрованное обратное условие. Если использован оператор NE, то скорее всего индексы не будут использованы.


Спасибо заметно ускорило но что еще можно сделать!?


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Valeriy написал:
что еще можно сделать!?

Я бы еще попробовал на основе BUDAT сделать range для GJAHR. GJAHR ключевое поле, а BUDAT - нет, и использовать вместе с BUDAT.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 17 2008, 17:20 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Проверить план запроса. Если используется не HASH JOIN, то пересобрать статистику по обеим табличкам.
Ну и не использовать INTO CORRESPONDING FIELDS.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 17 2008, 17:21 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
Есть мнение разделить запрос на 2 запроса
и обрабатывать уже полученные внутренние таблицы
Code:

SELECT .. FROM J_3RKKRS into itab1.
WHERE J_3RKKRS~BUKRS eq BUKRS
    and J_3RKKRS~BUDAT in BUDAT.

SELECT ....ZFI_SC_DR  into itab2
WHERE ZFI_SC_DR~PRIZNAK eq '1' " Доходы (1) Расходы (2) .

loop at tab1.
read itab2.
...
endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 17 2008, 17:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
Всем спасибо все получилось! Кстати BUDAT IN Заменил на >= и <= так работает быстрее.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 17 2008, 19:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Valeriy написал:
Всем спасибо все получилось! Кстати BUDAT IN Заменил на >= и <= так работает быстрее.
А как же "рваные" интервалы? Или стоит NO-EXTENSION?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 11:32 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 28 2008, 10:39
Сообщения: 86
select a,b,sum(c) as c from TEST group by a,b

а в сапе как такой селект написать, или
надо делать через такую конструкцию
select ...
loop..
......
endloop.
endselect.

СПАСИБО


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 11:44 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
vuces, так даже по этой теме видно как.

не хватает только определения внутренней таблицы и INTO в селекте.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 12:42 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 28 2008, 10:39
Сообщения: 86
с select ...into разобрался

еще один вопросик
как сделать штоб sum(faglflexa~tsl)>0 =>ZTSLP , а
sum(faglflexa~tsl)<0 =>ZTSLM

data: ZTSLP type faglflexa~tsl,
ZTSLM type faglflexa~tsl,

SELECT faglflexa~rbukrs sum(faglflexa~tsl)
INTO (test-rbukrs ZTSL*)
FROM faglflexa WHERE ( budat > ultimo AND budat <= higdate )
AND rbukrs IN s_rbukrs
GROUP BY rbukrs.
APPEND saldo_out.
ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 13:07 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
2 vuces:
не совсем понял что ты имел в виду. Например можно так

select
...
having
(having sum(faglflexa~tsl) <= 0 or
sum(faglflexa~tsl) => ZTSLP )
and
(sum(faglflexa~tsl) >= 0 or
sum(faglflexa~tsl) =>ZTSLM ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 13:25 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 28 2008, 10:39
Сообщения: 86
я имел ввиду
чтоб значения faglflexa~tsl>0 сумыровались в ZTSLP
а faglflexa~tsl<0 сумыровались в ZTSLM


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 18 2008, 14:01 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
не получится

почитай справку по аггрегативным функциям для SELECT (а лучше F1 по опретору SELECT ) в OPEN SQL

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


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

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


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

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


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

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