Một câu truy vấn chạy tốt với vài nghìn dòng có thể trở thành thảm họa khi dữ liệu lên hàng chục triệu. Dưới đây là những điều tôi rút ra sau nhiều lần đo đạc trên hệ thống thật, không phải lý thuyết suông.
Đo trước khi tối ưu
Luôn bắt đầu bằng kế hoạch thực thi (execution plan). Đoán mò chỉ mục nào cần thêm thường tốn thời gian và làm chậm thao tác ghi.
- Xác định câu truy vấn chậm nhất theo tổng thời gian, không chỉ theo từng lần chạy.
- Kiểm tra số dòng được đọc so với số dòng trả về.
- Tìm các phép quét toàn bảng nằm ngoài dự tính.
Chỉ mục: ít mà chắc
Một chỉ mục tổng hợp đặt đúng thứ tự cột thường hiệu quả hơn nhiều chỉ mục đơn lẻ. Cột có độ chọn lọc cao và xuất hiện trong điều kiện bằng nên đứng trước.
Mỗi chỉ mục là một khoản nợ: nó làm truy vấn đọc nhanh hơn và khiến mọi lần ghi chậm đi một chút.
Phân trang bằng khóa thay vì OFFSET
- Sắp xếp theo một khóa duy nhất và tăng dần.
- Lưu khóa của dòng cuối cùng ở trang trước.
- Truy vấn trang tiếp theo bằng điều kiện lớn hơn khóa đó.
Cách này giữ thời gian truy vấn gần như không đổi dù bạn đang ở trang thứ mười hay trang thứ mười nghìn.
