Duy1122
Junior Member
Phân trang là một kỹ thuật phổ biến trong quản lý dữ liệu lớn để chia nhỏ kết quả truy vấn thành các trang, giúp cải thiện trải nghiệm người dùng và giảm tải hệ thống. Tuy nhiên, khi dữ liệu ngày càng lớn, việc phân trang xâu (pagination) trở nên phức tạp và yêu cầu tối ưu hóa để đảm bảo hiệu suất. Trong bài viết này, chúng ta sẽ thảo luận về lệnh truy vấn SQL để tăng hiệu suất trong bài toán phân trang xâu.
Thời gian truy vấn:
Với lệnh truy vấn trên, tôi thử lại 3 lần liên tục và cho ra kết quả:
2. Ví dụ 2:
Trong ví dụ lần này, Cơ sở dữ liệu thực hiện sắp xếp giá trị cột created_at và bỏ qua 950,000 hàng đầu tiên, lấy id của 20 hàng tiếp theo. Kết quả của subquery là một tập hợp các id. Tiếp theo thực hiện JOIN giữa table_test và kết quả của subquery bằng cách khớp id và cho ra kết quả.
Thời gian truy vấn:
Với lệnh truy vấn trên, tôi thử lại 3 lần liên tục và cho ra kết quả:
Lệnh Truy Vấn
1. Ví dụ 1:
SQL:
SELECT *
FROM table_test
ORDER BY created_at
OFFSET 950000
LIMIT 20;
Thời gian truy vấn:
Với lệnh truy vấn trên, tôi thử lại 3 lần liên tục và cho ra kết quả:
- Lần 1: 2.518s
- Lần 2: 2.425s
- Lần 3: 2.446s
2. Ví dụ 2:
SQL:
SELECT t.*
FROM table_test t
INNER JOIN (
SELECT id
FROM table_test
ORDER BY created_at
OFFSET 950000
LIMIT 20
) subquery
ON t.id = subquery.id
ORDER BY t.created_at;
Trong ví dụ lần này, Cơ sở dữ liệu thực hiện sắp xếp giá trị cột created_at và bỏ qua 950,000 hàng đầu tiên, lấy id của 20 hàng tiếp theo. Kết quả của subquery là một tập hợp các id. Tiếp theo thực hiện JOIN giữa table_test và kết quả của subquery bằng cách khớp id và cho ra kết quả.
Thời gian truy vấn:
Với lệnh truy vấn trên, tôi thử lại 3 lần liên tục và cho ra kết quả:
- Lần 1: 580s
- Lần 2: 566s
- Lần 3: 550s
Tại Sao Lệnh Truy Vấn Này Nhanh Hơn
- Giảm Số Lượng Hàng Xử Lý:
- Subquery chỉ lấy id của 20 hàng sau khi bỏ qua 950,000 hàng. Điều này giới hạn số lượng dữ liệu phải xử lý trong bước đầu tiên, giảm tải công việc cho cơ sở dữ liệu.
- Việc lấy chỉ id (một cột) nhanh hơn nhiều so với việc lấy toàn bộ hàng (SELECT *).
- Tối Ưu Hóa Sắp Xếp:
- Việc sắp xếp và bỏ qua hàng trong subquery diễn ra trên tập hợp dữ liệu nhỏ hơn (chỉ cột id), nhanh hơn so với sắp xếp toàn bộ hàng trong bảng.
- Sau đó, JOIN chỉ trên 20 hàng kết quả từ subquery, giúp giảm tải công việc cho bước JOIN và sắp xếp cuối cùng.
- Sử Dụng Chỉ Mục Hiệu Quả:
- Cột id có chỉ mục, JOIN trên id sẽ diễn ra nhanh hơn. Cơ sở dữ liệu có thể tận dụng chỉ mục để nhanh chóng truy xuất các hàng tương ứng.

lần đầu em thấy cái này á