Phân trang · OFFSET · keyset
OFFSET đọc rồi vứt, keyset nhảy thẳng
Phân trang bằng OFFSET so với keyset
Lấy 10 đơn sau order_id 900000 trong perf.orders: LIMIT 10 OFFSET 900000 phải đọc rồi bỏ 900.000 dòng, mất khoảng 60 đến 90 ms; WHERE order_id > 900000 LIMIT 10 dùng chỉ mục khóa chính nhảy thẳng tới vị trí cần, dưới 0,5 ms.
perf.orders · 1.000.000 DÒNG, ĐÃ SẮP THEO order_id
1
900.001
→
OFFSET
trang 90.001
LIMIT 10 OFFSET 900000
đọc và bỏ 900.000 dòng
≈ 60–90 ms
10 dòng trả về
KEYSET
trang 90.001
WHERE order_id > 900000 LIMIT 10
bỏ qua, không đọc
chỉ mục nhảy thẳng tới chỗ cần
< 0,5 ms
10 dòng trả về
OFFSET càng lớn, database càng phải đọc nhiều dòng chỉ để vứt đi.
THỜI GIAN ĐO BẰNG \timing TRÊN MÁY TÁC GIẢ · MÁY BẠN SẼ KHÁC
© tiennhm