Как вы определяете лучшие индексы базы данных в Rails? - PullRequest
4 голосов
/ 04 мая 2011

В Rails я пытался создать индексы базы данных, которые ускоряют мои запросы, но я часто обнаруживаю, что после запуска миграции моей базы данных для создания новых, она все еще не использует создаваемые мной индексы (дажехотя мне кажется, что они идеально подходят для определенного запроса).

Существует ли в Rails инструмент, который может выполнять поиск в системе и определять конкретные индексы, которые необходимо создать для оптимальной производительности?

Если нет, существуют ли какие-либо конкретные правила, определяющие, почему моя база данных не использует мои любовно созданные индексы?

По сути, мой вопрос заключается в следующем: как мне избежать моего текущего процесса, а именно: 1) запустить миграцию, создав набор возможных индексов, 2) выяснить, что они не работают, 3) откатить и почувствоватьнемного больше разочарован очевидной близорукостью моей базы данных?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Что ж, если все ваши запросы имеют форму SELECT * FROM , индексы, вероятно, не будут использоваться.Сначала настройте запросы, чтобы вы возвращали только те данные, которые необходимы для каждого представления, а затем строите оттуда индекс.

Кроме того, вы можете запустить EXPLAIN для базы данных для каждого запроса, который будетГораздо ярче, чем любой гем / плагин, который может предложить сообщество Ruby.

0 голосов
/ 03 сентября 2011

Check https://github.com/eladmeidar/rails_indexes, который сканирует отсутствующие индексы.

Относится к эффективности запросов, но не обязательно к индексам, это https://github.com/flyerhzm/bullet, который уведомляет вас о таких вещах, как N + 1запросы и возможности загрузки.

0 голосов
/ 04 мая 2011

какую базу данных вы используете?вам следует провести некоторый анализ журнала запросов, чтобы увидеть, какие запросы выполняются, как часто, сколько времени они занимают и т. д. ... хорошим инструментом для postgres является pgfouine .mysql имеет медленный журнал запросов , поэтому вы можете найти худших нарушителей.Имея эти данные в руках, вы можете запустить объяснение для самых медленных запросов, посмотреть, какие индексы имеет смысл добавлять и т. д.

Можете ли вы привести несколько примеров медленных запросов и вашу текущую схему и индексы?

...