У меня есть представление, которое управляет полномочиями на уровне записей. Для этого мы будем называть его «AuthorityView». Он работает путем просмотра базовых таблиц, фактических данных, таблицы «Полномочия записи» и таблицы «Группы пользователей».
Для этого примера мы выбираем записи «Сотрудник». Существует базовая таблица «EmployeeData», которая содержит все данные, «EmployeeRecordAuthority», в которой указывается, какие группы пользователей имеют какой доступ к данным (чтение, чтение / запись, обновление, удаление и т. Д.) И «Группы пользователей» просто хранит, к каким группам принадлежат пользователи.
Представление использует довольно простое соединение, но обрабатывает много записей (~ 100 тыс. Записей сотрудников и ~ 3 м записей прав доступа). Конечным результатом является подмножество записей, которые пользователь может просматривать.
Проблема, с которой я столкнулся, заключается в том, что запросы к представлению без критериев очень медленные. Выполнение «select * from EmployeeAuthorityView» занимает около 6-7 минут, однако применение «top» к нему заставляет его работать так, как ожидается. «Выбор лучших 10000000 * из EmployeeAuthorityView» занимает всего несколько секунд.
Все соответствующие индексы существуют между таблицами и были перестроены.
Что может быть причиной замедления запросов? Почему быстрее выполнять запрос с указанным «верхним» пределом, даже если количество намного превышает количество записей в таблице?
Заранее спасибо.