# Tối ưu hóa hiệu năng (Ruby on Rails) > Database indexing, tối ưu hóa truy vấn, gem Bullet, rack-mini-profiler, đồng thời/Puma, thread-safety, connection pool - 26 câu hỏi phỏng vấn - Senior - [Câu hỏi phỏng vấn: Ruby on Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van.md) ## 1. Mục đích chính của việc thêm index trên một cột cơ sở dữ liệu là gì? **Câu trả lời** Một index tăng tốc các truy vấn tìm kiếm bằng cách tạo ra một cấu trúc dữ liệu được tối ưu hóa (thường là B-tree) giúp tránh quét tất cả các hàng trong bảng. Nếu không có index, cơ sở dữ liệu thực hiện sequential scan có thể rất chậm trên các bảng lớn. Các cột thường được dùng trong mệnh đề WHERE, ORDER BY hoặc join là ứng viên lý tưởng để lập chỉ mục. ## 2. Làm thế nào để tạo một index tổng hợp trên các cột user_id và created_at trong một migration của Rails? **Câu trả lời** Phương thức add_index nhận một mảng các cột để tạo một index tổng hợp. Thứ tự cột rất quan trọng: index sẽ hiệu quả cho các truy vấn lọc trước theo user_id, sau đó created_at, nhưng không hiệu quả cho các truy vấn chỉ lọc theo created_at. Một index tổng hợp là tối ưu cho các truy vấn sử dụng các cột từ trái sang phải. ## 3. Vấn đề N+1 trong ngữ cảnh của ActiveRecord là gì? **Câu trả lời** Vấn đề N+1 xảy ra khi một truy vấn ban đầu lấy về N bản ghi, sau đó N truy vấn bổ sung được thực thi để tải các liên kết của mỗi bản ghi. Ví dụ, tải 100 posts rồi thực hiện 100 truy vấn riêng lẻ cho các tác giả. Mẫu này nhân số lượng truy vấn lên và làm giảm hiệu năng nghiêm trọng. Giải pháp là sử dụng includes, preload hoặc eager_load để tải các liên kết trong một hoặc hai truy vấn. ## Còn 23 câu hỏi nữa - Nên dùng phương thức ActiveRecord nào để giải quyết vấn đề N+1 bằng cách tải các liên kết trước? - Vai trò của gem Bullet trong việc tối ưu hóa hiệu năng Rails là gì? Đăng ký miễn phí: https://sharpskill.dev/vi/login ## Các chủ đề phỏng vấn Ruby on Rails khác - [Kiến thức cơ bản về Ruby](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/ruby-basics.md): 25 câu hỏi, Junior - [Lập trình hướng đối tượng trong Ruby](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/ruby-oop.md): 20 câu hỏi, Junior - [Kiến thức cơ bản về Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-fundamentals.md): 18 câu hỏi, Junior - [Routing & Controllers](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/routing-controllers.md): 22 câu hỏi, Junior - [Kiến thức cơ bản về ActiveRecord](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/active-record-basics.md): 25 câu hỏi, Junior - [Views & Template ERB](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/views-erb-templates.md): 20 câu hỏi, Junior - [Liên kết ActiveRecord](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/active-record-associations.md): 24 câu hỏi, Mid-Level - [Truy vấn ActiveRecord nâng cao](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/active-record-queries.md): 28 câu hỏi, Mid-Level - [Form Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-forms.md): 20 câu hỏi, Mid-Level - [Xác thực & Phân quyền](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/authentication-authorization.md): 22 câu hỏi, Mid-Level - [Asset Pipeline hiện đại & frontend](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-asset-pipeline.md): 18 câu hỏi, Mid-Level - [Chế độ API của Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-api-mode.md): 20 câu hỏi, Mid-Level - [Kiểm thử với RSpec](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-testing-rspec.md): 24 câu hỏi, Mid-Level - [ActiveJob & Background Jobs](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/active-job-background-jobs.md): 20 câu hỏi, Mid-Level - [ActionCable & WebSockets](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/action-cable-websockets.md): 18 câu hỏi, Mid-Level - [ActionMailer](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/action-mailer.md): 18 câu hỏi, Mid-Level - [ActiveStorage](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/active-storage.md): 20 câu hỏi, Mid-Level - [Chiến lược Caching](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/caching-strategies.md): 20 câu hỏi, Mid-Level - [Migration nâng cao](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/database-migrations-advanced.md): 20 câu hỏi, Mid-Level - [Rails Engines & ứng dụng mô-đun](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-engines-modular-apps.md): 18 câu hỏi, Senior - [Design Patterns trong Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-design-patterns.md): 22 câu hỏi, Senior - [Lập trình meta trong Ruby](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/ruby-metaprogramming.md): 20 câu hỏi, Senior - [Bảo mật Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-security.md): 22 câu hỏi, Senior - [GraphQL với Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/graphql-rails.md): 20 câu hỏi, Senior - [Triển khai & Sản xuất](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-deployment-production.md): 20 câu hỏi, Senior - [Monitoring & Logging](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/monitoring-logging.md): 20 câu hỏi, Senior - [Chiến lược nâng cấp Rails](https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/rails-upgrade-strategies.md): 18 câu hỏi, Senior --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/vi/technologies/ruby-on-rails/cau-hoi-phong-van/performance-optimization