So sánh như vậy không có ý nghĩa, vì bạn đang so sánh táo với cam.
Hai truy vấn này không giống nhau, chúng đưa ra các giá trị khác nhau,
do đó MySql tối ưu hóa chúng theo một cách khác và kế hoạch của họ có thể khác nhau.
Xem ví dụ đơn giản sau: http:/ /sqlfiddle.com/#!9/98678/2
create table account_range(
is_active int,
range_start int,
range_end int
);
insert into account_range values
(1,-20,100), (1,10,30);
Truy vấn đầu tiên đưa ra 2 hàng:
select * from account_range
where is_active = 1 and 25 between range_start AND range_end;
| is_active | range_start | range_end |
|-----------|-------------|-----------|
| 1 | -20 | 100 |
| 1 | 10 | 30 |
Truy vấn thứ hai chỉ cung cấp 1 hàng:
SELECT * FROM account_range
WHERE
is_active = 1 AND
range_start = (SELECT MAX(range_start)
FROM account_range
WHERE range_start <= 25
) AND
range_end = (SELECT MIN(range_end)
FROM account_range
WHERE range_end >= 25
)
| is_active | range_start | range_end |
|-----------|-------------|-----------|
| 1 | 10 | 30 |
Để tăng tốc truy vấn này (truy vấn đầu tiên), hai chỉ mục bitmap có thể được sử dụng cùng với thao tác "bitmap và" - nhưng MySql không có tính năng như vậy.
Một tùy chọn khác là chỉ mục không gian ( ví dụ:chỉ mục GIN trong PostgreSql: http://www.postgresql. org / docs / current / static / textsearch-indexes.html
).
Và một tùy chọn khác là biến đổi sao (hoặc giản đồ sao) - bạn cần "chia" bảng này thành hai bảng "thứ nguyên" hoặc "số đo" và một bảng "dữ kiện" .. .. nhưng đây là chủ đề quá rộng, nếu bạn muốn biết thêm, bạn có thể bắt đầu từ đây: https:/ /en.wikipedia.org/wiki/Star_schema