Разница между стандартной таблицей и хэшированной таблицей Abap - PullRequest
9 голосов
/ 24 февраля 2012

Не могли бы вы дать мне четкое объяснение разницы между использованием "стандартной таблицы", "хешированной таблицы" или просто "таблицы". Кроме того, что означает «начальный размер 0»?

Для справки, пожалуйста, ознакомьтесь с кодом ниже.

it_c01_d006_raw TYPE STANDARD TABLE OF /bic/ac01_d00600
                       INITIAL SIZE 0,
it_c01_d006     TYPE HASHED TABLE OF /bic/ac01_d00600
                       WITH UNIQUE KEY /bic/cemployee /bic/cdatetype,
it_c01_d002     TYPE TABLE OF /bic/ac01_d00200.

Ответы [ 2 ]

19 голосов
/ 25 февраля 2012

Значение TYPE STANDARD TABLE OF и TYPE TABLE OF точно такое же, STANDARD подразумевается, если ничего не указано.Однако теперь в ОО-контексте ожидается, что вы полностью объявите внутренние таблицы и не сможете пропустить добавление STANDARD.В этом случае это просто стандартная внутренняя таблица, доступ к которой можно получить путем чтения по индексу таблицы или по ключу, если вы отсортировали таблицу вручную.

Таблица TYPE HASHED TABLE создает внутреннюю таблицуэто представляется с использованием внутреннего алгоритма HASH, позволяющего считывать данные в таблицу, где стоимость (приблизительно) не зависит от размера таблицы.Использование таблиц такого типа хорошо, когда у вас большие наборы данных с большим количеством операций чтения, но сравнительно небольшим числом операций записи.При объявлении хеш-таблицы необходимо также объявить UNIQUE KEY, поскольку алгоритм HASH зависит от этого.

INITIAL SIZE 0 также является избыточным использованием кода - это означает, что выделение памяти будет происходить в набореблоки.(Я не уверен, является ли этот размер предопределенным или настраиваемым с помощью BASIS), но НАЧАЛЬНЫЙ РАЗМЕР 0 является значением по умолчанию.Если бы вы хотели, чтобы выделение памяти происходило в наборах, в 10 раз превышающих количество строк во внутренней таблице, вы бы использовали «НАЧАЛЬНЫЙ РАЗМЕР 10», но в большинстве случаев оставить выделение памяти по умолчанию лучше, чем пытаться его принудительно вызвать.

Кроме того

Таблица TYPE SORTED TABLE может быть объявлена ​​либо с помощью клавиши UNIQUE, либо NON-UNIQUE.Стоимость чтения записи меньше, чем у таблицы STANDARD, поскольку она допускает BINARY SEARCH, но больше, чем у таблицы HASHED.Стоимость записи немного дороже, чем у таблицы STANDARD, но меньше, чем у таблицы HASHED.

7 голосов
/ 25 апреля 2012

Стандартная таблица

Это наиболее подходящий тип, если вы собираетесь обращаться к отдельным записям таблицы, используя индекс.Индексный доступ - это самый быстрый доступ.Вам следует заполнить стандартную таблицу, добавив строки (оператор ABAP APPEND), и прочитать, изменить и удалить записи, указав индекс (опция INDEX с соответствующей командой ABAP).Время доступа к стандартной таблице увеличивается в линейной зависимости от количества записей в таблице.Если вам нужен доступ к ключу, стандартные таблицы особенно полезны, если вы можете заполнить и обработать таблицу в несколько шагов.Например, вы можете заполнить таблицу, добавив записи, а затем отсортировать их.Если вы используете опцию двоичного поиска с доступом по ключу, время отклика будет логарифмически пропорционально количеству записей в таблице.

Хешированные таблицы

Это наиболее подходящий типдля любой таблицы, где основной операцией является доступ к ключу.Вы не можете получить доступ к хешированной таблице, используя ее индекс.Время ответа для доступа к ключу остается постоянным независимо от количества записей в таблице.Как и таблицы базы данных, хешированные таблицы всегда имеют уникальный ключ.Хешированные таблицы полезны, если вы хотите создать и использовать внутреннюю таблицу, которая напоминает таблицу базы данных, или для обработки больших объемов данных. Manu

...