SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;
yêu
INDEX(a, b)
cả hai cột, theo thứ tự đó.
Truy vấn tìm kiếm trong chỉ mục cho a = 12
, lấy (a,b)
đầu tiên ghép nối để lấy MIN(b)
và lấy cặp cuối cùng để lấy MAX(b)
.
Tuyên bố về "thay thế bằng một hằng số" gây nhầm lẫn vì nó đi quá sâu vào chi tiết về cách đầu tiên nó tìm ra cách thực hiện truy vấn (điều này xảy ra với giá trị tối thiểu và tối đa), sau đó tiến hành thực hiện những gì còn lại truy vấn (không còn gì).
Nói chung hơn, chỉ số tối ưu là thường một cái bắt đầu bằng tất cả WHERE
các cột được so sánh với các hằng số có =
. Sau đó, nó trở nên phức tạp, vì vậy hãy để tôi đưa ra một mẹo khác:
Chỉ mục "bao trùm" là chỉ mục có tất cả các cột được đề cập trong SELECT
(a
và b
trong ví dụ của tôi).
Xin lỗi, tôi có vẻ không hiểu rõ hơn sách hướng dẫn.