У меня есть приложение, которое иногда работает медленно, и я думаю, что оно связано с курсорами базы данных.
У меня нет доступа к источнику приложения, поэтому я не могу контролировать вызовы базы данных, но база данных открыта, поэтому я могу добавить индекс при необходимости.
Проблема в том, что я не знаю, действительно знаю, как ускорить курсоры с индексом.
Запросы курсора просты и выглядят как
SELECT * FROM table WHERE field1=1 AND field2=2 ORDER BY field3, field4
(Таблица содержит около 1М строк. Иногда также есть одиночное левое соединение)
Если я запускаю запрос непосредственно в SSMS, это занимает менее секунды, но когда он запускается из приложения в курсоре, для извлечения первой строки может потребоваться 30 секунд (проверено с помощью sql-trace).
Поля в предложениях WHERE и ORDER BY индексируются отдельно.
Полагаю, комбинированный индекс для field1, field2, field3, field4 сделает это быстрее. Есть ли способ ускорить его без создания индекса для каждой комбинации и порядка полей?
(Просто повторюсь: я не имею никакого влияния на то, как приложение обращается к базе данных. Производительность может быть настроена только через индекс)