Недавно мы обновили наш DataWarehouse (база данных MS SQL 2000), добавив новую таблицу для контроля уровня доступа пользователей к информации во всех других таблицах.Не вдаваясь в подробности, новая таблица имеет идентификатор пользователя и список идентификаторов учетных записей, к которым они могут получить доступ.Для всех наших таблиц в DataWarehouse было создано соответствующее представление, и мы попросили наших пользователей использовать эти представления для доступа к данным (и, таким образом, ограничивают их представление на основе уровня доступа в исходной таблице контроля доступа).
Для сложных запросов, которые используют многие из этих представлений, у нас, очевидно, есть проблема, из-за которой одна и та же таблица контроля доступа объединяется много раз.В настоящее время мы ничего не можем с этим поделать, так как существует множество запросов, которые мы не можем контролировать доступ к этому ресурсу.Поэтому нам необходимо внести любые возможные изменения в самой коробке, чтобы оптимизировать скорость доступа.
Datawarehouse обновляется только в одночасье, и, если честно, время, которое требуется, не имеет значения - скорость вставки не требуется,только выберите.Мы также можем перестроить индексы, если это необходимо.
Проблема, с которой мы столкнулись, несмотря на наличие индекса для этой неуникальной записи (столбец UserID), при выполнении трассировок плана выполнения мы видим, что вместо этого используются таблицы сканирования.Индекс поиска, который я понимаю, в основном игнорирует индекс.Это приводит к ужасным последствиям для производительности - запрос, который на прошлой неделе занимал, скажем, минуту выполнения, теперь может занимать 10, а некоторые нажимают час.
Все другие представления, которые теперь ссылаются на эту таблицу, объединяются в неиндексированный столбец (идентификатор учетной записи), а затем количество возвращаемых учетных записей отфильтровывается на основе NT-идентификатора пользователя.
Есть ли у кого-нибудь предложения о том, что мы можем сделать, чтобы улучшить производительность?Либо в краткосрочной перспективе (вещи, которые мы можем изменить на стороне инфраструктуры), либо в более долгосрочной перспективе (изменения в схеме базы данных, мы не можем сделать это легко, хотя, учитывая характер использования базы данных).
Спасибо!
Дэвид