Perbandingan seperti itu tidak masuk akal, karena Anda membandingkan apel dengan jeruk.
Kedua kueri ini tidak ekivalen, mereka memberikan hasil yang berbeda,
sehingga MySql mengoptimalkannya dengan cara yang berbeda dan rencana mereka bisa berbeda.
Lihat contoh sederhana ini: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);
Permintaan pertama memberikan 2 baris:
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 |
Kueri kedua hanya memberikan 1 baris:
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 |
Untuk mempercepat kueri ini (yang pertama), dua indeks bitmap dapat digunakan bersama dengan operasi "bitmap dan" - tetapi MySql tidak memiliki fitur seperti itu.
Opsi lainnya adalah indeks spasial ( misalnya indeks GIN di PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html
).
Dan opsi lain adalah transformasi bintang (atau skema bintang) - Anda perlu "membagi" tabel ini menjadi dua tabel "dimensi" atau "ukuran" dan satu tabel "fakta" .. .. tapi ini topik yang terlalu luas, jika Anda ingin tahu lebih banyak Anda bisa mulai dari sini:https:// /en.wikipedia.org/wiki/Star_schema