обнаруживать декартово произведение или другие неразумные запросы - PullRequest
2 голосов
/ 15 марта 2011

Я работаю над продуктом, который дает пользователям большую «гибкость» при создании sql, то есть они могут легко настраивать запросы, которые могут поставить систему на колени с более чем включающими предложения where.

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

1 Ответ

1 голос
/ 15 марта 2011

Я чувствую твою боль.Мне было поручено нечто подобное в прошлом.Это постоянная борьба между пользователями, требующими всех функций и возможностей 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).Вы можете сначала выполнить план по их запросу и использовать результаты этого для запроса или предупреждения пользователя.Но детали будут зависеть от того, с какой БД вы работаете.

...