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

Часовой пояс: 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 часа


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

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


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

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