Ускорение большого количества запросов SELECT, которые могут или не могут вернуть результат - PullRequest
0 голосов
/ 19 октября 2018

У меня есть этот запрос:

"SELECT SECURITY_ID FROM" + securitiesTable + "WHERE (ISIN =? Или CUSIP =? Или SEDOL =?)"

Мне нужно выполнить это около 50 тысяч раз.Строки могут иметь 1, 2 или все 3 значения в предложении where, и некоторые запросы не будут возвращать результатов.Для строк, которые возвращаются, мне нужно знать, какие ISIN / CUSIP / SEDOL они соответствуют, и мне нужно знать, какие из них не имеют результатов, поэтому я могу вставить их в таблицу позже.

Сейчас это очень медленно,Я предполагаю, что из-за времени прохождения 50k запросов по отдельности.Есть ли способ сделать это в пакете, отслеживая, для какого запроса результаты и какие запросы имеют нулевой результат?

1 Ответ

0 голосов
/ 19 октября 2018

Вместо выбора 50 тыс. Создайте временную таблицу, загрузите в нее свои ISIN, CUSIP и SEDOL, а затем join на эту таблицу.Затем получите результаты за один раз.Это приводит к трем сетевым передачам вместо 50 КБ.

В качестве альтернативы, реструктурируйте свой оператор в ... where ISIN in ('DE...','DE...',...), но большинство запросов не могут превышать длину 32 КБ в качестве строки запроса.При таком подходе все еще потребуется некоторое пакетирование.

Кроме того, в идеале, список ваших ценных бумаг уже находится в базе данных, поэтому вы можете либо выбрать их во временную таблицу, либо напрямую присоединить таблицу SecuritiesTable к остальной информации..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...