Это хорошая практика, чтобы напрямую писать SQL-запросы в рельсах? - PullRequest
4 голосов
/ 15 марта 2012

Я делаю заявку с очень большими данными и несколькими объединениями.Это плохая практика, чтобы сразу использовать полную строку sql в рельсах?Каковы недостатки написания полного SQL-запроса в rails?

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Это плохая практика, если вы делаете это, не понимая альтернатив.

Тем не менее, редко есть причина для этого. Фреймворк инкапсулирует его для вас, и выгода заключается в том, что вам приходится писать меньше кода. Другое преимущество - независимость от базы данных. Чем больше прямых запросов вы пишете, тем больше вероятность того, что вы напишете что-то, что сломается при переключении механизмов базы данных.

Это легко проверить. Если вы используете фреймворк правильно (то есть оптимизируете ActiveRecord, как вы найдете в многочисленных статьях) и все еще чувствуете, что ваши запросы слишком медленные ... вы всегда можете сравнить прямые запросы.

Но незнание того, как что-то сделать с использованием ассоциаций ActiveRecord, не является хорошей причиной для обращения к прямому SQL.

http://guides.rubyonrails.org/association_basics.html

1 голос
/ 15 марта 2012

SQL не является «плохой практикой» per se . Системы баз данных имеют множество встроенных способов SQL, которые выполняются гораздо медленнее и сложнее при написании и поддержке, если они написаны на Ruby. Как и аналитические функции Oracle.

Тем не менее, ActiveRecord довольно просто написать и , вы, вероятно, не получите повышение производительности, просто используя SQL-запрос . По крайней мере, если запрос, который вы пишете, похож на запрос, который ActiveRecord написал бы в любом случае! ;)

Возможно, вам следует попытаться работать с ActiveRecord и прибегать к SQL, только если вы столкнулись с проблемами, которые не можете решить другим способом. Таким образом, вы сохраняете свой код простым, пока вам не понадобится сделать это по-другому (т.е. не «оптимизировать рано»).

Обычно я пытаюсь заставить вещи работать в ActiveRecord (или DataMapper, или Sequel, или что-то еще), но я определенно прибегал к finder_sql, когда работу нужно было выполнить быстро, и я не мог добраться туда, куда хотел, используя «сахар» ORM , В других случаях я основывал объект rails на одном массивном представлении в базе данных.

Надеюсь, это поможет.

: D

1 голос
/ 15 марта 2012

Если вам нужен более мощный синтаксис, чем предоставляет стандартный модуль ActiveRecord, см. meta_where gem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...