Я помогаю поддерживать программу, которая, по сути, представляет собой удобный интерфейс только для чтения для большой и сложной базы данных MySQL — программа создает специальные запросы SELECT на основе пользовательского ввода, отправляет запросы в БД, получает результаты, постобрабатывает их и красиво отображает пользователю.
Я хотел бы добавить некоторую форму разумного/эвристического предсказания ожидаемой производительности сконструированного запроса — иногда пользователи непреднамеренно делают запросы, которые неизбежно займут очень много времени (потому что они будут возвращать огромные наборы результатов или потому что они re «идти против зерна» в отношении того, как индексируется БД), и я хотел бы иметь возможность отображать пользователю некоторую «несколько надежную» информацию/догадку о том, сколько времени займет запрос. Он не должен быть идеальным, пока он не становится настолько плохим и часто выходит из-под контроля реальности, что вызывает эффект «кричащего волка», когда пользователи учатся игнорировать его ;-) Основываясь на этой информации, пользователь может решить пойти выпить кофе (если оценка составляет 5-10 минут), пойти пообедать (если это 30-60 минут), убить запрос и вместо этого попробовать что-то другое (возможно, более жесткие ограничения на информацию, которую они запрашивают). ), и т.д., и т.п.
Я не очень хорошо знаком с оператором EXPLAIN MySQL - я вижу много информации о том, как использовать его для оптимизации запроса или схемы БД, индексации и т. д., но не так много о том, как использовать его для моей более ограниченной цели - просто сделать прогноз, принимая БД как данность (конечно, если прогнозы достаточно надежны, я могу в конечном итоге переключиться на их использование также для выбора между альтернативными формами, которые может принять запрос, но это на будущее: на данный момент я был бы очень рад просто показать пользователям приблизительные оценки производительности для вышеупомянутых целей).
Любые указатели ...?