Каков наилучший способ выполнения операторов вставки 100k? - PullRequest
2 голосов
/ 13 мая 2019

Я создал набор из 100 тыс. Запросов на вставку, чтобы сгенерировать данные в нескольких таблицах Oracle для тестирования производительности.Каков наилучший способ выполнить это?

В прошлом я пробовал такие инструменты, как Oracle SQL developer и Toad.Однако не уверен, что сможет обработать этот большой объем.

Простые операторы вставки, такие как -

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS) 
VALUES (5000001, 63, 1, '91111111', 'N/A', 107);

1 Ответ

2 голосов
/ 14 мая 2019

Вставка 100 000 строк с операторами SQL - это отлично .Это не большой объем данных, и есть несколько простых приемов, которые помогут вам сократить время выполнения до нескольких секунд.

Сначала убедитесь, что ваш инструмент не отображает что-то для каждого оператора.Копирование и вставка операторов в окно рабочего листа будет ужасно медленным.Но сохранение операторов в сценарии SQL * Plus и запуск этого сценария могут быть быстрыми.Если возможно, используйте настоящий клиент SQL * Plus.Эта программа доступна практически на любой системе и хороша для запуска небольших сценариев.

Если вам нужно использовать SQL Developer, сохраните операторы 100K в текстовом файле, а затем запустите его как скрипт (F5).Этот метод занял 45 секунд на моем ПК.

set feedback off
@C:\temp\test1.sql

Во-вторых, пакетные операторы SQL для устранения накладных расходов.Вам не нужно пакетировать все из них, пакетирования по 100 операторов за раз достаточно, чтобы уменьшить 99% накладных расходов.Например, сгенерируйте одну тысячу операторов следующим образом:

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS)
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
...
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual;

Сохраните это в текстовом файле, запустите его таким же образом в SQL Developer (F5).Этот метод занял 4 секунды на моем ПК.

set feedback off
@C:\temp\test1.sql

Если вы не можете существенно изменить формат операторов INSERT, вы можете просто добавить BEGIN и END; / между каждыми 100 строками,Это позволит одновременно передавать на сервер 100 операторов и значительно снизить нагрузку на сеть.

Для еще более высоких скоростей запускайте сценарий на обычном SQL * Plus.На моем компьютере загрузка 100 000 строк занимает всего 2 секунды.

Для таких данных среднего размера полезно сохранить удобство операторов SQL.И с помощью нескольких приемов вы можете получить производительность почти такую ​​же, как в двоичном формате.

...