Оптимизация динамических запросов

У меня есть задание для бизнеса, которое в основном сводится только к извлечению данных из базы данных (Microsoft SQL Server 2008). В процессе пользователи смогут выбрать, какие столбцы выбрать, выбрать из какого представления выбрать и создать предложение WHERE. SQL-запрос строится на основе того, что выбирает пользователь. Требуется, чтобы пользователь мог выбрать ЛЮБОЙ столбец из ЛЮБОГО представления и отфильтровать по ЛЮБОМУ столбцу в предложении WHERE. Компания не хочет, чтобы решение использовало хранилище данных / OLAP, и хочет ограничить использование стороннего программного обеспечения. По сути, им просто нужно приложение .NET Windows Forms, которое динамически создает запросы SQL на основе графического интерфейса пользователя и подключается к базе данных.

Меня беспокоит то, как оптимизировать запросы. Я пока не умею оптимизировать SQL-запросы, но моя первая мысль была: что, если пользователь выберет фильтрацию по столбцу, у которого нет индекса (в предложении WHERE)? Предоставляя пользователю такую ​​гибкость, он потенциально может создавать запросы, которые будут настолько неэффективными, что на их выполнение потребуется много времени.

Я понимаю, что производительность никогда не может быть хорошей с большим количеством данных, если они фильтруют столбцы, у которых нет индексов, но могу ли я что-нибудь сделать, чтобы это улучшить? Конечно, я не могу просто добавлять индексы ко всем столбцам.

Я не обязательно просто ищу оптимизацию запросов, но я также думаю, есть ли какие-нибудь настройки сервера, которые я могу сделать, например, кеширование? В общем, я внимательно слушаю и ищу любые советы, которые могут помочь мне улучшить производительность.

Есть предложения?

Заранее спасибо!

6
задан ba0708 12 January 2012 в 13:44
поделиться