Убедитесь, что только «разумные» запросы

В нашей организации нам нужно разрешить сотрудникам фильтровать данные в нашем веб-приложении, предоставляя предложения WHERE. Он долго работал, но мы иногда сталкиваемся с пользователями, которые предоставляют запросы, требующие полного сканирования таблиц на больших таблицах или неэффективных объединений и т. Д.

Какой-то клоун может написать что-то вроде:

select * from big_table where
Name in (select name from some_table where name like '%search everything%')
or name in ('a', 'b', 'c')
or price < 20
or price > 40
or exists (select 1 from some_other_table where col1 + col2 + col3 = 4)
or exists (select 1 from table_a, table+b)

Очевидно, что это не лучший способ запроса этих таблиц с вычисленными значениями, неиндексированными столбцами, множеством OR и неограниченным соединением для table_a и table_b.

Но для пользователя это может иметь смысл.

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

Я предполагаю, что в c # / sql-server это программный способ получить план выполнения запроса перед его выполнением. И если да, то какие факторы влияют на стоимость? Предполагаемая стоимость ввода / вывода? Ориентировочная стоимость процессора? Каковы разумные пределы, при которых пользователь может сказать, что его запрос бесполезен?

РЕДАКТИРОВАТЬ: Мы компания по исследованию рынка. У нас есть тысячи опросов, каждый со своими данными. У нас есть десятки исследователей, которые хотят разрезать эти данные произвольным образом. У нас есть инструменты, позволяющие им создавать «действительные» фильтры с использованием графического интерфейса, но некоторые «опытные пользователи» хотят предоставлять свои собственные запросы. Я понимаю, что это не стандартная или лучшая практика, но как еще я могу позволить десяткам пользователей запрашивать таблицы для строк, которые они хотят, используя произвольно сложные условия и постоянно меняющиеся условия?

Ответы на вопрос(11)

Ваш ответ на вопрос