Эти два утверждения в Rails 5 Way противоречат друг другу? - PullRequest
0 голосов
/ 11 ноября 2018

Я сейчас читаю "Rails 5 Way", и я дошел до раздела, охватывающего includes и joins. До сих пор я понимал, что includes лучше всего подходит для активной загрузки данных БД в память, чтобы избежать N + 1 запросов, тогда как joins больше подходит для простой фильтрации набора результатов запроса на основе связанных таблиц, без фактического доступа к атрибутам этих связанных строк таблицы:

1

включает в себя (* ассоциации) Active Record имеет возможность устранить «N + 1» запросов, позволяя вам указать, какие ассоциации стремятся загрузить используя метод или опцию includes в ваших поисках. Активная запись загрузит эти отношения с минимальным количеством запросов возможно.

2

объединения (выражение) joins работает аналогично включению с использованием INNER Присоединяйтесь к полученному SQL-запросу. Один из ключевых битов знаний для понять о внутренних объединениях, они возвращают только набор записей которые соответствуют таблицам, к которым присоединяются. Если ряд по обе стороны от в соединении отсутствует соответствующая строка на другой стороне, и не будет быть возвращен в наборе результатов.

Однако на странице 202 я вижу следующее:

3

На сегодняшний день наиболее распространенным методом joins является выборка данные для связанных объектов в одном операторе SELECT, чтобы предотвратить так называемые N + 1 запросы.

Использование, описанное в цитате № 3, похоже, ближе соответствует цитате № 1, чем цитате № 2, то есть в ней говорится о цели сокращения N + 1 запросов путем активной загрузки данных (что мне известно includes звонит либо eager_load или preload под капот). Честно говоря, цитата № 3 вообще не соответствует # 1.

Мой вопрос: как мы можем согласовать эти 3 цитаты друг с другом? Или они уже синхронизированы друг с другом, а я просто что-то упускаю?

...