Có rất nhiều cách để chúng ta tối ưu hóa câu truy vấn. Trong đó, tôi thấy một phương pháp vô cùng hiệu quả là kiểm soát trật tự điều kiện xét ở mệnh đề WHERE.
Đối với cách làm này, bạn cần quan sát, đánh giá dữ liệu của mình xem điều kiện nào ở mệnh đề where có thể loại bỏ nhiều dòng dữ liệu nhất sắp ở trên, rồi đến các điều kiện loại bỏ được ít dòng dữ liệu hơn thì sắp ở dưới.
Để các bạn dễ hình dung hơn mời các bạn xem qua ví dụ sau nhé:
SELECT * FROM `ten_bang` WHERE <Điều kiện 1> AND <Điều kiện 2> AND <Điều kiện 3>
Trong câu query trên chúng ta có 3 điều kiện ở mệnh đề WHERE. Giả sử:
- <Điều kiện 1> tôi loại được 10.000 dòng dữ liệu;
- <Điều kiện 2> tôi loại được 20.000 dòng dữ liệu;
- <Điều kiện 3> tôi loại được 30.000 dòng dữ liệu;
Thì khi ấy, các bạn cần sắp xếp lại các điều kiện trong mệnh đề WHERE của câu truy vấn như sau:
SELECT * FROM `ten_bang` WHERE <Điều kiện 3> AND <Điều kiện 2> AND <Điều kiện 1>
Bằng cách này tôi đã từng xử lý để đưa một truy vấn trên 10 phút xuống còn vài giây. Thật đấy!
Hy vọng hữu ích với bạn!
Nosomovo