Текущее время: Вс, июн 22 2025, 02:33

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: table...with key, теоретический вопрос по быстродействию
СообщениеДобавлено: Пн, мар 28 2005, 07:33 
Гость
проясните плиз вопрос быстродействия: есть необходимость выгружать в несколько itab очень большие "связанные" наборы записей (SQL-выборка гдето на 100000 записей) с хитрой обработкой - т.е. по сути приходится реализовывать inner join на вн.таблицах.

Что быстрее - использовать sorted table with key для увязки, или standard table? В первом случае возникает вопрос - как вгружать данные в itab, т.к. ей требуется уже упорядоченный по key набор (иначе валится в дамп ILLEGAL_SORT_ORDER), а SQL-запрос не всегда позволяет использовать order by ?

Есть-ли прирост в скорости поиска в случае с sorted table, или оно и для standard wih key построит некий внутрениий "индекс" для быстрого поиска совпадений?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 28 2005, 08:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
В таких случаях не бывает однозначного ответа. Лучше всего реализовать разные варианты и замерить.
Если по теории, то время чтения стандартной таблицы пропорционально количеству записей, сортированной таблицы - логарифму количества записей, хэшированной - от количества записей не зависит. Для стандартной таблицы также можно использовать бинарный поиск -
READ TABLE itab WITH KEY k1 = v1 ... kn = vn
BINARY SEARCH. Только для этого таблица должна быть отсортирована в порядке указанных в качестве ключа поиска полей. Также надо принять во внимание не только количество записей в таблице, но и количество чтений из нее. Понятно, что при большом количестве записей быстрее всего будет чтение из хэшированной таблицы. Однако, при добавлении записей в хэшированную таблицу тратится доп. время на расчет хэша. Поэтому если в таблице 1000000 записей, а прочитать ее потом будет надо 3 раза, то хэшированную таблицу использовать не надо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: table...with key, теоретический вопрос по быстродействию
СообщениеДобавлено: Пн, мар 28 2005, 08:50 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
PavelBerezin написал(а):
... (SQL-выборка гдето на 100000 записей)... по сути приходится реализовывать inner join на вн.таблицах.


У Вас классический случай, когда лучше всего применить метод "параллельных курсоров", описанный в примерах производительности.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: *
СообщениеДобавлено: Пн, мар 28 2005, 13:03 
Гость
спасибо, насчет курсоров посмотрю в RTFMe :wink:

пока реализовал с помощью двух одинаковых таблиц, одна standard, другая sorted - SQL-отбор идет в standard table, потом sort и перегрузка во вторую - а по ней уже розык через read table...with key

вродебы прирост есть, смущает только удвоенный расход ресурсов AS (по сути standard table какбы промежуточный буфер)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: *
СообщениеДобавлено: Пн, мар 28 2005, 13:15 
Гость
а нет ли способоа менять тип вн.таблицы? т.е. динамически объявить ее как standrd, заполнить данными из БД, отсортировать, а потом объявить как sorted? :roll:


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: *
СообщениеДобавлено: Пн, мар 28 2005, 13:33 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
PavelBerezin написал(а):
спасибо, насчет курсоров посмотрю в RTFMe


Это не RTFM. Это в se80 - далее Среда->Примеры->Примеры производительности. Затем Internal Tables->Simple Algoritms->Joining internal tables.


Последний раз редактировалось EGF Пн, мар 28 2005, 15:57, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: table...with key, теоретический вопрос по быстродействию
СообщениеДобавлено: Пн, мар 28 2005, 14:14 
Гость
PavelBerezin написал(а):

Что быстрее - использовать sorted table with key для увязки, или standard table? В первом случае возникает вопрос - как вгружать данные в itab, т.к. ей требуется уже упорядоченный по key набор (иначе валится в дамп ILLEGAL_SORT_ORDER), а SQL-запрос не всегда позволяет использовать order by ?



А можно увидеть кусок кода в котором идет такая ошибка?
Так как звучит это очень странно - система сама вставляет записи в нужном порядке при заполнении внутр.табл.

Напр., следующий кусок работает на ура:

DATA: it_s TYPE SORTED TABLE OF bkpf
WITH NON-UNIQUE KEY blart budat.

SELECT * FROM bkpf INTO TABLE it_s WHERE bukrs = '2400'
AND gjahr = '2005'.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: *
СообщениеДобавлено: Пн, мар 28 2005, 15:24 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
PavelBerezin написал(а):
спасибо, насчет курсоров посмотрю в RTFMe :wink:

пока реализовал с помощью двух одинаковых таблиц, одна standard, другая sorted - SQL-отбор идет в standard table, потом sort и перегрузка во вторую - а по ней уже розык через read table...with key

вродебы прирост есть, смущает только удвоенный расход ресурсов AS (по сути standard table какбы промежуточный буфер)

А зачем перегружать в sorted table?
READ TABLE itab WITH KEY k1 = v1 ... kn = vn BINARY SEARCH по стандартной таблице это тоже самое что и
READ TABLE itab WITH KEY k1 = v1 ... kn = vn по сортированной.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: table...with key, теоретический вопрос по быстродействию  Тема решена
СообщениеДобавлено: Пт, апр 08 2005, 08:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
PavelBerezin написал(а):
Что быстрее - использовать sorted table with key для увязки, или standard table?

Sorted table однозначно быстрее, конечно при условии выборки по ключу.
PavelBerezin написал(а):
(иначе валится в дамп ILLEGAL_SORT_ORDER)

Это APPEND валит в дамп, а вот INSERT не валит.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: *
СообщениеДобавлено: Пт, апр 08 2005, 11:36 
Гость
нда, загадочный язык этот абап - два оператора делают одно и тоже, а результат разный :twisted:


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

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


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

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


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

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