Есть ли какое-либо программное обеспечение (желательно с открытым исходным кодом), которое может анализировать PostgreSQL EXPLAIN и рекомендовать необходимые индексы, которые ускорят запрос?
Буквально пару минут назад я нашел это: http://explain.depesz.com/. Вы вставляете результаты вашего EXPLAIN ANALYZE, и он показывает вам, где могут быть проблемы (даже с цветовой кодировкой).
Из раздела помощи ...
объяснение.depesz.com - это инструмент для поиска реальной причины медленных запросов. Как правило, можно использовать запрос EXPLAIN ANALYZE; и прочтите вывод. Проблема в том, что не все части вывода легко понимаются кем-либо, и не всегда очевидно, является ли узел, выполняющийся за 17,3 мсек, быстрее или медленнее, чем тот, который выполняется за 100 мсек, - учитывая тот факт, что первый выполняется 7 раз. Чтобы использовать сайт, просто перейдите на его первую страницу и вставьте туда объяснение и анализ результатов вашего psql. Этот вывод может выглядеть так. После загрузки вы будете перенаправлены на страницу, которая показывает разобранную и красиво (ну, по крайней мере, приятно для меня :) раскрашенную, чтобы акцентировать внимание на важных частях. Это могло выглядеть так. Боковое примечание: URL-адрес для цветного вывода является постоянным, поэтому вы можете просто использовать его, чтобы показать его другим - например, для этих хороших парней на irc-канале #postgresql на freenode. На этом графике используются 4 цвета для обозначения важных вещей: белый фон - все в порядке; желтый фон - данный узел беспокоит коричневый фон - данный узел вызывает больше беспокойства; красный фон - данный узел очень беспокоит. вы будете использовать: «Эксклюзивный», «Включенный» или «Строки X».
Я не знаю ни одного инструмента для Postgres, который бы делал это алгоритмически, и, на мой взгляд, человеческий мозг (а часто и небольшие эксперименты в среде разработки) действительно является единственным подходящим инструментом здесь. Здесь задействовано множество факторов, в том числе будет ли планировщик запросов даже думать, что ваш индекс стоит использовать - это определяется тем, как ваша установка настроила параметры планировщика запросов и размер / статистику задействованной таблицы ( с).
Лучшая рекомендация, которую я могу дать, - это сделать EXPLAIN ANALYZE
(в ANALYZE
важно - он даст вам время выполнения запроса и подплана), посмотрите сами на результаты и атакуйте наибольшее число, которое вы увидите первым. Вероятно, вы могли бы написать синтаксический анализатор, чтобы разбить вывод EXPLAIN (особенно в 9.0 с выводом JSON), но я не знаю никого, кто бы занимался этим еще (это в основном то, что делают оптимизаторы для MS-SQL ...)
Ничего подобного, но для любопытных есть / был исследовательский проект по реализации чего-то подобного. Найдите "советник по индексам PostgreSQL".