
การเพิ่มประสิทธิภาพการทำงาน
Database indexing, การเพิ่มประสิทธิภาพ query, gem Bullet, rack-mini-profiler, การทำงานพร้อมกัน/Puma, thread-safety, connection pool
1จุดประสงค์หลักของการเพิ่ม index บนคอลัมน์ของฐานข้อมูลคืออะไร?
จุดประสงค์หลักของการเพิ่ม index บนคอลัมน์ของฐานข้อมูลคืออะไร?
คำตอบ
index ช่วยเร่งความเร็วของ query การค้นหาโดยสร้างโครงสร้างข้อมูลที่ปรับให้เหมาะสม (โดยทั่วไปคือ B-tree) ซึ่งหลีกเลี่ยงการสแกนทุกแถวในตาราง หากไม่มี index ฐานข้อมูลจะทำ sequential scan ซึ่งอาจช้ามากในตารางขนาดใหญ่ คอลัมน์ที่ใช้บ่อยในเงื่อนไข WHERE, ORDER BY หรือ join เป็นตัวเลือกที่เหมาะสมที่สุดสำหรับการทำดัชนี
2จะสร้าง index แบบรวม (composite) บนคอลัมน์ user_id และ created_at ใน migration ของ Rails ได้อย่างไร?
จะสร้าง index แบบรวม (composite) บนคอลัมน์ user_id และ created_at ใน migration ของ Rails ได้อย่างไร?
คำตอบ
เมธอด add_index รับ array ของคอลัมน์เพื่อสร้าง index แบบรวม ลำดับของคอลัมน์มีความสำคัญ: index จะมีประสิทธิภาพสำหรับ query ที่กรองด้วย user_id ก่อน แล้วตามด้วย created_at แต่ไม่มีประสิทธิภาพสำหรับ query ที่กรองด้วย created_at เพียงอย่างเดียว index แบบรวมจะเหมาะที่สุดสำหรับ query ที่ใช้คอลัมน์จากซ้ายไปขวา
3ปัญหา N+1 ในบริบทของ ActiveRecord คืออะไร?
ปัญหา N+1 ในบริบทของ ActiveRecord คืออะไร?
คำตอบ
ปัญหา N+1 เกิดขึ้นเมื่อ query เริ่มต้นดึงข้อมูล N เรคคอร์ด แล้วมี query เพิ่มเติมอีก N ครั้งที่ถูกรันเพื่อโหลด association ของแต่ละเรคคอร์ด ตัวอย่างเช่น โหลด posts 100 รายการ แล้วทำ query แยกอีก 100 ครั้งสำหรับผู้เขียน รูปแบบนี้ทำให้จำนวน query เพิ่มทวีคูณและลดทอนประสิทธิภาพอย่างรุนแรง วิธีแก้คือใช้ includes, preload หรือ eager_load เพื่อโหลด association ในหนึ่งหรือสอง query
ควรใช้เมธอด ActiveRecord ใดเพื่อแก้ปัญหา N+1 ด้วยการโหลด association ล่วงหน้า?
gem Bullet มีบทบาทอะไรในการเพิ่มประสิทธิภาพการทำงานของ Rails?
+23 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Ruby on Rails อื่นๆ
พื้นฐาน Ruby
การเขียนโปรแกรมเชิงวัตถุใน Ruby
พื้นฐาน Rails
Routing & Controllers
พื้นฐาน ActiveRecord
Views และ ERB Templates
การเชื่อมโยงของ ActiveRecord
การสอบถาม ActiveRecord ขั้นสูง
ฟอร์ม Rails
การยืนยันตัวตนและการอนุญาต
Asset Pipeline สมัยใหม่และ frontend
โหมด API ของ Rails
การทดสอบด้วย RSpec
ActiveJob & Background Jobs
ActionCable & WebSockets
ActionMailer
ActiveStorage
กลยุทธ์การ Caching
การ Migration ขั้นสูง
Rails Engines และแอปแบบโมดูลาร์
Design Patterns ใน Rails
เมตาโปรแกรมมิงใน Ruby
ความปลอดภัยของ Rails
GraphQL กับ Rails
การดีพลอยและโปรดักชัน
Monitoring & Logging
กลยุทธ์การอัปเกรด Rails
เชี่ยวชาญ Ruby on Rails สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี