Используя MySQL просматривает в приложении Ruby on Rails для улучшения производительности

Хорошо, я нашел ответ, для тех, кто не может найти это, как я: НЕ используйте CreateGraphics ()!

10
задан Jack Bonneman 18 February 2014 в 08:47
поделиться

4 ответа

"Проблема" с представлениями (и в этом случае Вы, вероятно, хотели бы осуществленное представление, принимая данные, на которых базируется сложный запрос, часто не изменяется), то, что Вы нарушаете DRY'ness направляющих, в некоторой степени (добавление модели UserV для представления, которое обсудят пуристы, дублирование модели User.)

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

  • В MySQL видят, можно ли оптимизировать запрос далее, таким образом, он взял бы миллисекунды вместо секунд (добавьте соответствующие индексы, работайте, АНАЛИЗИРУЮТ, и т.д.),
  • Если Вы имеете опцию использования/испытания другого RDBMS, такого как Пост-ГРЭС, любой ценой даете ему попытку. MySQL ужасающе плох со сложными соединениями (InnoDB) по сравнению с другими механизмами на основе издержек как Oracle и Пост-ГРЭС. Я переключился от MySQL до Пост-ГРЭС и сложных соединений, которые займут 30-е + на MySQL (со всеми индексами на месте), берут миллисекунды на Пост-ГРЭС. Если проигрывание с Пост-ГРЭС хорошо использует графический PGAdminIII, объясняет инструмент плана.
5
ответ дан 4 December 2019 в 01:32
поделиться

http://github.com/aeden/rails_sql_views/tree/master

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

Если у Вас есть так очень связанные данные, Вы могли бы посмотреть на использование чего-то как DataMapper вместо ActiveRecord с направляющими, поскольку это поддерживает лениво загружающиеся данные как требуется.

1
ответ дан 4 December 2019 в 01:32
поделиться

Удостоверьтесь, что MySQL Query Caching включен, который кэширует набор результатов. У меня было несколько ситуаций, где много запросов без соединений по сравнению с немногими запросами с соединениями на самом деле быстрее даже при том, что Вы совершаете больше поездок в сервер.

1
ответ дан 4 December 2019 в 01:32
поделиться

Я использую табличные представления в направляющих регулярно, и я довольно доволен этим. Направляющие рассматривают их как нормальные таблицы насколько Вы только используете их для чтения записей (который является моим обычным сценарием). Пока Ваше представление состоит только из одной таблицы, можно даже сделать все другие материал CRUD с ним, также. Так, мой ответ: просто сделайте это.

3
ответ дан 4 December 2019 в 01:32
поделиться