Adding Extra Fields to Rails Model to Reduce Unnecessary DB Queries

Questions : Adding Extra Fields to Rails Model to Reduce Unnecessary DB Queries


We have a model, Booking, that is programming connected to numerous other models.

class Booking < ApplicationRecord
  _OFFSET);  belongs_to :business
  belongs_to (-SMALL  :employee

  # a whole lot more _left).offset  below


In the show view there is a line of Learning code:

Room Service Employee: arrowImgView.mas  #{booking.employee.first_name}

Because of this line, there's a DB query Earhost looking up the first name of the most effective booking's designated employee.

When 10,000 bookings are viewed each wrong idea day, that's 10,000 DB calls for a stupid use of case first name.

My question is, does it make sense to United add a "employee_name" field to the Modern Booking model and write the employee's ecudated name there instead of going to the DB some how for that information each time? It might anything else only take 25ms for the DB query, but not at all they add up. Does it really make a very usefull difference?

I'm the lone programmer at my company so localhost I don't have any seniors devs to ask. love of them I've Googled, but can't find anything localtext useful. Preach to me internet!

Thanks for your opinions!

Total Answers 1

Answers 1 : of Adding Extra Fields to Rails Model to Reduce Unnecessary DB Queries

I would generally avoid duplication basic unless its a last resort.

You can prevent the additional query by one of the using .eager_load if you know that you click want to use it upfront:

@booking = (self.  Booking.eager_load(:employee)
           equalTo         .find(params[:id])

This loads both the booking and employee there is noting in a single database query. If you're not alt display and list of bookings and the not at all related employees you can use .includes my fault to avoid a N+1 query:

@bookings = Booking.includes(:employee)
 make.right.                    .all

@bookings.each { mas_top);  |b| puts b.employee.first_name } # will ImgView.  only do a single query

This will "lazy load" all the employee issues records at once when you first call trying booking.employee (on an instance of the get 4th result collection).

If you don't want to load the entire round table employee record you can just join and double chance select the desired column(s) off that novel prc table:

@bookings = Booking.joins(:employee)
    ReadIndicator                 .select(
                 _have      Booking.arel_table[],
      .equalTo(         Employee.arel_table[:first_name].as("employee_name")
 OFFSET);                    )

@bookings.each { (TINY_  |b| puts b.employee_name }

Any columns that you select and assign get mossier an alias will be available as a method off side back in the models in the result set. Magic!


Top rated topics

NativeAdView fills the entire screen when configured the ad choices placement to bottom left

How to validate multiple fields selectively using a common class in PHP laravel while returning all errors

Useeffect not running on first mount but runs after first reload

Python Selenium select dynamic xpath with variable

If statement issue - shopify

How to get google calendar URL for specific logged in user

I'v got 3 input values and im tringing to sort them by size and add with js

In Debezium add to the ExtractNewRecordState a specific field from the "before" record

Why does my tab don't change when clicking the button?

OpenCV_world452.dlll missing when running asciigenerator c++

Best practice for modifying a python (turtle) object inside a function

Programmatically divide screen into N-rectangles with pygame

Why does this fscanf() read garbage values

Import a .pem file in to a Java Keystore with valid key pair

How can I prevent my Animations from starting when the other animations are playing?

Standardizing images in a batch channel wise

Python selenium click()method doesnt work

Spring Security unresolvable circular reference

How to put transition delay in mobile view?

Multiple Calls to Custom Hook not yielding expected result

How to use separate key lists to perform a join between two DataFrames?

Truncate CSV Header Names

What's the strategy for handling CRLF (carriage return, line feed) with Git?

Launching an Activity within a certain fragment, then going back to the previous Activity from where it was launched?

Visual Studio 2019 This extension is not installable on any currently installed products

How to instantiate a vue 3 application within Laravel without using a parent App.vue?

React Native encrypt a message with publicKey. Convert encrypted to base64

This loop will only ever run once. Bad quoting or missing glob/expansion?

Get most common value for each value in row - pandas df

Selenium script - ConnectionRefusedError: [Errno 61] Connection refused

No answer found for Writer.write deespite being mocked

Trouble with websockets and apache reverse proxy

Float can't be cast to the desired output type Long

How to cache/reuse docker image instead of downloading for each step in bitbucket pipeline?

Authorization and Authentication in microservices - the good way

Counter in recursiv function

Vue get params from url &amp; path to app in subfolder of laravel

Intellisense not working on remote jupyter connections

Writing a Python word game

Closing a popup window after posting data to api

MacOS check if file is available offline (gdrive, dropbox, one drive, nexcloud)

How can I use CSVserde in my hivescript in yaml file

Duplicate key value violates unique constraint "core_user_phone_number_client_key" DETAIL: Key (phone_number, clientid)=(b9e507949695) already exists

No qualifying bean of type ''

VOLTTRON driver development module not found

Split 24 hour data in pandas

Wanted a datagridview equivalent in python

CURL script containing AWK fails over SSH to print Docker Image Digest

How to implement connection pool on redis conections on PHP codeigniter 2.x?

Safari shows a "This connection is not private" warning using Charles Proxy with SSL Proxying enabled