ActiveRecord генерирует дорогие DESCRIBE-запросы для отношения has_and_belongs_to_many с MySQL - PullRequest
3 голосов
/ 19 марта 2011

У нас есть приложение Rails3, для которого мы только начали разработку.Мы используем отношение has_and_belongs_to_many между двумя моделями.Каждый раз, когда мы используем одну из этих моделей, ActiveRecord выполняет запрос DESCRIBE для таблицы соединений, например:

SQL (1.1ms)  describe `articles_tags`

Эти запросы относительно дороги (то есть более чем в 10 раз медленнее, чем фактический SELECT).-запрос) и выполняются очень часто.Они не кажутся мне необходимыми: таблица была автоматически сгенерирована из-за отношения has_and_belongs_to_many, поэтому ActiveRecord уже должен знать о ее структуре (только article_id и столбец tag_id).

Есть ли веская причиназа такое поведение?Если нет, как я могу остановить это?

Ответы [ 2 ]

4 голосов
/ 20 марта 2011

В режиме разработки сервер постоянно воссоздает все классы, поэтому вам не нужно перезагружать сервер для каждого изменения.В производстве ваши модели будут кэшироваться, и вам не нужно будет постоянно описывать таблицы.В вашем файле development.rb вы увидите следующую строку:

config.cache_classes = false

, которая управляет этим поведением.Должно быть установлено значение true в production.rb

1 голос
/ 07 декабря 2011

Если ваша таблица не имеет первичного ключа, она будет запускать описание для каждого запроса.Я исправил мой, добавив первичный ключ.Работает даже в режиме разработки.

...