viktorianer

viktorianer

High Performance PostgreSQL for Rails: Explanation regarding the use of includes with a limit (Page 124)

Dear Andrew, @andatki

I found the explanation regarding the use of .includes() with a limit in the context of vehicle reservations to be quite insightful. However, I believe the discussion on performance implications could benefit from further clarification, particularly regarding the difference in behavior with and without a limit.

Here’s a suggested rewrite to enhance clarity:


When using .includes() to load vehicle reservations, the query is split into two parts. First, a query retrieves a limited number of vehicles (e.g., 2 vehicles). Then, another query fetches the associated reservations for these vehicles using an IN clause with the vehicle_ids of the retrieved vehicles. Keep in mind that if the IN clause contains too many values, it can lead to performance issues.

Performance Implications

  • Without limit: If there are many vehicles, the IN clause can become very large, which may degrade performance.
  • With limit: The IN clause remains small, improving performance for the secondary query.

Additionally, this explanation can move before LEFT OUTER JOIN part, in order to avoid a context switch.

I hope this suggestion helps make the performance implications clearer for the readers.

Best regards,

Viktor

Most Liked

andatki

andatki

Author of High Performance PostgreSQL for Rails

Thank you @viktorianer. Your description makes sense. If we revise the book in the future, I’ll pay extra attention to this section, as eager loading is of course a very common pattern.

In my experience, I’ve seen poor performance from big lists of values in an IN clause on big tables. I wrote up some thoughts about this in a blog post here: Big Problems From Big IN lists with Ruby on Rails and PostgreSQL | Software Engineer, Author, High Performance PostgreSQL for Rails

Where Next?

Popular Pragmatic Bookshelf topics Top

yulkin
your book suggests to use Image.toByteData() to convert image to bytes, however I get the following error: "the getter ‘toByteData’ isn’t...
New
jamis
The following is cross-posted from the original Ray Tracer Challenge forum, from a post by garfieldnate. I’m cross-posting it so that the...
New
mikecargal
Title: Hands-On Rust (Chap 8 (Adding a Heads Up Display) It looks like ​.with_simple_console_no_bg​(SCREEN_WIDTH*2, SCREEN_HEIGHT*2...
New
mikecargal
Title: Hands-on Rust: question about get_component (page 295) (feel free to respond. “You dug you’re own hole… good luck”) I have somet...
New
joepstender
The generated iex result below should list products instead of product for the metadata. (page 67) iex> product = %Product{} %Pento....
New
adamwoolhether
Is there any place where we can discuss the solutions to some of the exercises? I can figure most of them out, but am having trouble with...
New
hazardco
On page 78 the following code appears: <%= link_to ‘Destroy’, product, class: ‘hover:underline’, method: :delete, data: { confirm...
New
kolossal
Hi, I need some help, I’m new to rust and was learning through your book. but I got stuck at the last stage of distribution. Whenever I t...
New
Henrai
Hi, I’m working on the Chapter 8 of the book. After I add add the point_offset, I’m still able to see acne: In the image above, I re...
New
tkhobbes
After some hassle, I was able to finally run bin/setup, now I have started the rails server but I get this error message right when I vis...
New

Other popular topics Top

ohm
Which, if any, games do you play? On what platform? I just bought (and completed) Minecraft Dungeons for my Nintendo Switch. Other than ...
New
AstonJ
Or looking forward to? :nerd_face:
503 14512 277
New
AstonJ
We have a thread about the keyboards we have, but what about nice keyboards we come across that we want? If you have seen any that look n...
New
New
New
PragmaticBookshelf
Build highly interactive applications without ever leaving Elixir, the way the experts do. Let LiveView take care of performance, scalabi...
New
foxtrottwist
A few weeks ago I started using Warp a terminal written in rust. Though in it’s current state of development there are a few caveats (tab...
New
AstonJ
If you get Can't find emacs in your PATH when trying to install Doom Emacs on your Mac you… just… need to install Emacs first! :lol: bre...
New
New
PragmaticBookshelf
Explore the power of Ash Framework by modeling and building the domain for a real-world web application. Rebecca Le @sevenseacat and ...
New

Sub Categories: