Nắm chắc cách MySQL hoạt động ở tầng hiệu năng, không chỉ biết CRUD hay query thông thường.
1. Performance Tuning (Tối ưu hiệu năng tổng thể)
Bạn cần hiểu cách MySQL tiêu tốn tài nguyên và cách cấu hình để tối ưu.
- Server-level tuning:
innodb_buffer_pool_size,query_cache_size,tmp_table_size,max_connections,innodb_flush_log_at_trx_commit— hiểu công dụng, khi nào chỉnh.- Xác định bottleneck qua
SHOW STATUS,SHOW ENGINE INNODB STATUS.
- Schema-level tuning:
- Chọn kiểu dữ liệu phù hợp (
INTvsBIGINT,CHARvsVARCHAR). - Thiết kế quan hệ và ràng buộc hợp lý để tránh join nặng.
- Chọn kiểu dữ liệu phù hợp (
- Connection & pool tuning khi backend dùng ORM (Laravel Eloquent):
Tránh N+1 query, bật query caching hợp lý, và batch insert/update.
2. Indexing (Tối ưu chỉ mục)
Bạn cần hiểu sâu cách MySQL dùng chỉ mục.
- Loại index: B-Tree, Hash (trên MEMORY engine), Fulltext, Composite.
- Khi nào index hữu ích:
- WHERE, JOIN, ORDER BY, GROUP BY – nhưng phải đúng thứ tự cột.
- Composite index: quy tắc “leftmost prefix”.
- Ví dụ: index
(user_id, created_at)có hiệu lực choWHERE user_id = ?vàWHERE user_id = ? AND created_at > ?, nhưng không choWHERE created_at > ?riêng.
- Ví dụ: index
- Over-indexing: nhiều index → làm INSERT/UPDATE chậm, bạn cần biết cách cân đối.
3. Query Optimization
Khi query phức tạp (JOIN nhiều bảng, GROUP BY, ORDER BY, subquery), bạn cần biết:
- Sử dụng
EXPLAINđể xem query plan (key, type, rows, extra). - Tối ưu bằng:
- Giảm join nếu không cần thiết.
- Chuyển subquery thành join hoặc CTE.
- Dùng index phù hợp với WHERE + ORDER BY cùng lúc.
- Denormalization hợp lý:
Khi load data nặng, bạn có thể lưu sẵn dữ liệu tổng hợp (materialized view / summary table). - Caching layer: Redis hoặc query cache trong Laravel để tránh query lặp.
4. Laravel Context (thực tế trong công việc)
- Tránh N+1 bằng
with()hoặcload(). - Dùng
chunk(),cursor()cho dataset lớn. - Query log +
DB::listen()để tìm query chậm. - Cấu hình
slow_query_logtrên MySQL để theo dõi query > X ms. - Khi cần: viết query tay (raw SQL) thay vì rely hoàn toàn vào Eloquent.
5. Thực tế yêu cầu
- Giải thích vì sao query này chậm và cách tối ưu.
- Viết SQL truy vấn nhanh hơn từ ví dụ thực tế.
- So sánh
INNER JOINvsEXISTStrong tối ưu hóa. - Cách bạn debug query chậm trong production.
- Khi nào bạn dùng
index hint.

