База данных находится в облаке Azure и в настоящее время не используется в рабочей среде.Есть 80 000 строк, и uprn - это VARCHAR (100);
Я уже использую JOI для проверки каждого UPRN;
Я использую KNEX с базой данных SQL Server сследующий запрос whereIn:
knex(LOCATIONS.table).whereIn(LOCATIONS.uprn, req.body.uprns)
, но для его завершения требуется 8-12 с, а иногда и время ожидания.если я использую .toQuery () для той же вещи, SSMS вернет результат в течение 1-2.
Если я сделаю необработанный запрос, результирующие .toQuery () или toString () будут работать в SSMS и возвращатьРезультаты.Но если я попытаюсь использовать raw напрямую, он вернет 0 результатов.
Я ищу либо исправить то, что делает whereIn таким медленным, либо получить необработанный запрос.
EDIT 1:
После долгих отладок и попыток - похоже, ошибка связана с тем, как knex работает с массивами, поэтому я сделал цикл for для добавления???для каждого элемента массива, а затем введите массив для всех параметров.
Это привело меня к осознанию того, что проблема производительности связана с параметризацией на SQL-сервере.
В итоге я создал необработанную строку запроса со всеми параметрами и проверил ввод с помощью конфигурации Joi string / regex:
Joi.string()
.min(1)
.max(35)
.regex(/^[a-z\d\-_\s]+$/i)
, допускающей только алфавитно-цифровые символы, тире и пробелы, которые должны помешатьsql впрыск.
Я собираюсь глубже разобраться с проблемами безопасности и могу сделать отдельный вход в систему, который может только ВЫБРАТЬ данные из этой таблицы и больше ничего не выполнять с этими запросами.