# การเพิ่มประสิทธิภาพการทำงาน (Ruby on Rails) > Database indexing, การเพิ่มประสิทธิภาพ query, gem Bullet, rack-mini-profiler, การทำงานพร้อมกัน/Puma, thread-safety, connection pool - 26 คำถามสัมภาษณ์ - Senior - [คำถามสัมภาษณ์: Ruby on Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions.md) ## 1. จุดประสงค์หลักของการเพิ่ม index บนคอลัมน์ของฐานข้อมูลคืออะไร? **คำตอบ** index ช่วยเร่งความเร็วของ query การค้นหาโดยสร้างโครงสร้างข้อมูลที่ปรับให้เหมาะสม (โดยทั่วไปคือ B-tree) ซึ่งหลีกเลี่ยงการสแกนทุกแถวในตาราง หากไม่มี index ฐานข้อมูลจะทำ sequential scan ซึ่งอาจช้ามากในตารางขนาดใหญ่ คอลัมน์ที่ใช้บ่อยในเงื่อนไข WHERE, ORDER BY หรือ join เป็นตัวเลือกที่เหมาะสมที่สุดสำหรับการทำดัชนี ## 2. จะสร้าง 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 เกิดขึ้นเมื่อ query เริ่มต้นดึงข้อมูล N เรคคอร์ด แล้วมี query เพิ่มเติมอีก N ครั้งที่ถูกรันเพื่อโหลด association ของแต่ละเรคคอร์ด ตัวอย่างเช่น โหลด posts 100 รายการ แล้วทำ query แยกอีก 100 ครั้งสำหรับผู้เขียน รูปแบบนี้ทำให้จำนวน query เพิ่มทวีคูณและลดทอนประสิทธิภาพอย่างรุนแรง วิธีแก้คือใช้ includes, preload หรือ eager_load เพื่อโหลด association ในหนึ่งหรือสอง query ## มีอีก 23 คำถาม - ควรใช้เมธอด ActiveRecord ใดเพื่อแก้ปัญหา N+1 ด้วยการโหลด association ล่วงหน้า? - gem Bullet มีบทบาทอะไรในการเพิ่มประสิทธิภาพการทำงานของ Rails? สมัครฟรี: https://sharpskill.dev/th/login ## หัวข้อสัมภาษณ์ Ruby on Rails อื่นๆ - [พื้นฐาน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-basics.md): 25 คำถาม, Junior - [การเขียนโปรแกรมเชิงวัตถุใน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-oop.md): 20 คำถาม, Junior - [พื้นฐาน Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-fundamentals.md): 18 คำถาม, Junior - [Routing & Controllers](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/routing-controllers.md): 22 คำถาม, Junior - [พื้นฐาน ActiveRecord](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-basics.md): 25 คำถาม, Junior - [Views และ ERB Templates](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/views-erb-templates.md): 20 คำถาม, Junior - [การเชื่อมโยงของ ActiveRecord](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-associations.md): 24 คำถาม, Mid-Level - [การสอบถาม ActiveRecord ขั้นสูง](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-record-queries.md): 28 คำถาม, Mid-Level - [ฟอร์ม Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-forms.md): 20 คำถาม, Mid-Level - [การยืนยันตัวตนและการอนุญาต](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/authentication-authorization.md): 22 คำถาม, Mid-Level - [Asset Pipeline สมัยใหม่และ frontend](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-asset-pipeline.md): 18 คำถาม, Mid-Level - [โหมด API ของ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-api-mode.md): 20 คำถาม, Mid-Level - [การทดสอบด้วย RSpec](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-testing-rspec.md): 24 คำถาม, Mid-Level - [ActiveJob & Background Jobs](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-job-background-jobs.md): 20 คำถาม, Mid-Level - [ActionCable & WebSockets](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/action-cable-websockets.md): 18 คำถาม, Mid-Level - [ActionMailer](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/action-mailer.md): 18 คำถาม, Mid-Level - [ActiveStorage](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/active-storage.md): 20 คำถาม, Mid-Level - [กลยุทธ์การ Caching](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/caching-strategies.md): 20 คำถาม, Mid-Level - [การ Migration ขั้นสูง](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/database-migrations-advanced.md): 20 คำถาม, Mid-Level - [Rails Engines และแอปแบบโมดูลาร์](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-engines-modular-apps.md): 18 คำถาม, Senior - [Design Patterns ใน Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-design-patterns.md): 22 คำถาม, Senior - [เมตาโปรแกรมมิงใน Ruby](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/ruby-metaprogramming.md): 20 คำถาม, Senior - [ความปลอดภัยของ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-security.md): 22 คำถาม, Senior - [GraphQL กับ Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/graphql-rails.md): 20 คำถาม, Senior - [การดีพลอยและโปรดักชัน](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-deployment-production.md): 20 คำถาม, Senior - [Monitoring & Logging](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/monitoring-logging.md): 20 คำถาม, Senior - [กลยุทธ์การอัปเกรด Rails](https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/rails-upgrade-strategies.md): 18 คำถาม, Senior --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/th/technologies/ruby-on-rails/interview-questions/performance-optimization