Я чувствую твою боль.Мне было поручено нечто подобное в прошлом.Это постоянная борьба между пользователями, требующими всех функций и возможностей SQL, и в то же время жалобы на то, что он слишком сложен, не помогает им, не мешает им делать глупости.
Добавление подкачки в запросне остановит выполнение плохих запросов, но уменьшит ущерб.Если вы показываете только первые 50 записей, возвращенных из SELECT * FROM UNIVERSE, и предоставляете возможность постраничного перехода к следующим 50 и т. Д. И т. Д., Вы можете избежать проблем с нехваткой памяти и уменьшить снижение производительности.Я не знаю, подходит ли это для вашей области данных / бизнеса;но я принудительно добавляю объединения таблиц, когда пользователь их не предоставляет.Если запрос содержит TABLE A и TABLE B, A.ID должен быть равен B.ID;Я добавляю его.
Если вы не против написания кода, специфичного для базы данных, я знаю, что вы можете получить данные о запросе из базы данных (Explain Plan
в Oracle - http://www.adp-gmbh.ch/ora/explainplan.html).Вы можете сначала выполнить план по их запросу и использовать результаты этого для запроса или предупреждения пользователя.Но детали будут зависеть от того, с какой БД вы работаете.