Меня интересует понимание улучшения производительности в следующем случае:
В настоящее время я работаю над приложением, которое имеет иерархическую структуру сущностей, в которой, в зависимости от уровня пользователя в организации, они будут иметь назначение определенной сущности на определенном уровне - и, таким образом, будут иметь доступ ко всем своим дочерним элементам (в в этом случае здания внутри районов в пределах регионов по всей территории США). Большинство суперпользователей будут иметь в своем портфеле свыше 20 000 отдельных субъектов, а некоторые - до 40 000.
Вместо того, чтобы вдаваться в подробности, достаточно сказать, что для определения всех сущностей, к которым имеет доступ пользователь, необходима хорошая логика. Эта логика в настоящее время обрабатывается с использованием табличной функции, которая используется в 95% хранимых процедур. Средняя хранимая процедура занимает не более 1-2 секунд. НО, на странице ASP.Net, которая вызывает более 10 различных хранимых процедур, производительность быстро возрастает до 20+ секунд.
В качестве альтернативы мы думали о том, чтобы вызвать эту табличную функцию только один раз (после входа в систему) и сохранить результаты в таблице (после очистки любых предыдущих значений для того же пользователя). Тогда бы все хранимые процедуры ссылались на эту новую таблицу вместо табличной функции. Тест показал, что при выборе из новой таблицы страница, загрузка которой заняла 15 секунд, может отрисоваться менее чем за 3 секунды.
Например:
- Пользователь входит в систему
- Система удаляет все сущности для пользователя в таблице
- система вставляет все сущности пользователя, затем
- система отправляет их в веселом режиме и больше не запускает табличную функцию для текущего сеанса
Мы обеспокоены тем, что из-за того, что сотни пользователей могут последовательно входить и выходить из приложения, удаление и вставка в эту таблицу так часто может привести к значительному падению производительности из-за блокировки на уровне строк. Кто-нибудь еще использовал таблицу SQL таким образом? Если это так, следует ли нам беспокоиться о низкой производительности из-за постоянной вставки и удаления из одной таблицы.