Zo'n vergelijking is niet logisch, aangezien je appels met peren vergelijkt.
Deze twee zoekopdrachten zijn niet gelijkwaardig, ze geven verschillende resultaten,
dus optimaliseert MySql ze op een andere manier en hun plannen kunnen verschillen.
Zie dit eenvoudige voorbeeld: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);
Eerste zoekopdracht geeft 2 rijen:
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 |
Tweede zoekopdracht geeft slechts 1 rij:
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 |
Om deze zoekopdracht te versnellen (de eerste), kunnen twee bitmapindexen worden gebruikt samen met de "bitmap en"-bewerking - maar MySql heeft zo'n functie niet.
Een andere optie is een ruimtelijke index ( bijvoorbeeld GIN-indexen in PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html
).
En een andere optie is een stertransformatie (of een sterschema) - u moet deze tabel "verdelen" in twee "dimensie"- of "metingen"-tabellen en één "feiten"-tabel .. .. maar dit is een te breed onderwerp, als je meer wilt weten kun je hier beginnen:https:/ /en.wikipedia.org/wiki/Star_schema