🔥PostgreSQL: LIMIT ... OFFSET vs OFFSET ... FETCH NEXT - Nên dùng cái nào?
2 phút đọc

🔥PostgreSQL: LIMIT ... OFFSET vs OFFSET ... FETCH NEXT - Nên dùng cái nào?
Khi làm việc với cơ sở dữ liệu, đặc biệt là trong các ứng dụng phân trang dữ liệu, chúng ta thường sử dụng hai cách phổ biến để giới hạn số lượng bản ghi trả về:
- LIMIT ... OFFSET
- OFFSET ... FETCH NEXT ... ROWS ONLY (chuẩn SQL:2008)
Câu hỏi đặt ra: Cách nào tốt hơn trong PostgreSQL? Hãy cùng tìm hiểu! 🔍
1️⃣ Cách hoạt động của LIMIT ... OFFSET
Đây là cú pháp phổ biến nhất trong PostgreSQL:
SELECT * FROM orders
ORDER BY order_date DESC
LIMIT 10 OFFSET 20;
- LIMIT 10: Lấy 10 bản ghi.
- OFFSET 20: Bỏ qua 20 bản ghi đầu tiên.
📌 Ưu điểm: Đơn giản, dễ hiểu, được hỗ trợ trên hầu hết các hệ quản trị CSDL.
📌 Nhược điểm: Với bảng dữ liệu lớn, OFFSET có thể gây chậm vì PostgreSQL vẫn phải quét tất cả các bản ghi trước đó, ngay cả khi chúng không được trả về.
2️⃣ Cách hoạt động của OFFSET ... FETCH NEXT ... ROWS ONLY
Cú pháp này được giới thiệu trong SQL:2008, giúp truy vấn dễ đọc hơn:
SELECT * FROM orders
ORDER BY order_date DESC
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
- OFFSET 20 ROWS: Bỏ qua 20 bản ghi đầu tiên.
- FETCH NEXT 10 ROWS ONLY: Lấy 10 bản ghi tiếp theo.
📌 Ưu điểm:
Cú pháp chuẩn SQL (nếu làm việc với nhiều RDBMS, đây là lựa chọn thống nhất). Dễ đọc hơn so với LIMIT ... OFFSET trong một số trường hợp.
📌 Nhược điểm:
Trong PostgreSQL, nó chỉ là một cách viết khác của LIMIT ... OFFSET, không có lợi thế về hiệu năng.
🔥 Vậy nên chọn cách nào?
✅ Trong PostgreSQL: LIMIT ... OFFSET vẫn là lựa chọn tốt nhất vì nó ngắn gọn và dễ đọc hơn.
✅ Nếu làm việc với nhiều hệ quản trị CSDL khác nhau: Hãy cân nhắc dùng OFFSET ... FETCH NEXT ... ROWS ONLY để đảm bảo tính tương thích.
⏭ Tối ưu phân trang trong PostgreSQL: Nếu bạn làm việc với dữ liệu lớn, hãy cân nhắc các cách tối ưu khác như:
- Keyset Pagination (phân trang theo khóa) để tránh quét toàn bộ dữ liệu.
- Materialized View hoặc caching nếu dữ liệu ít thay đổi.
Bạn đã gặp vấn đề gì khi sử dụng LIMIT ... OFFSET chưa? Hãy chia sẻ trong bình luận nhé! 🚀🔥
📌 Tài liệu chính thức của PostgreSQL cung cấp.
Bạn có thể kiểm tra tài liệu chính thức của PostgreSQL để xác nhận điều này:
🔹 LIMIT ... OFFSET: https://www.postgresql.org/docs/current/queries-limit.html
🔹 FETCH NEXT: https://www.postgresql.org/docs/current/sql-select.html#SQL-LIMIT
(Lưu ý: PostgreSQL chỉ liệt kê FETCH NEXT như một tùy chọn cú pháp, không nhấn mạnh việc sử dụng nó.)
#SQL #PostgreSQL #Database #SQLPerformance #Backend #SoftwareDevelopment #WeCommit100xShare