Sådan en sammenligning giver ikke mening, da du sammenligner æbler med appelsiner.
Disse to forespørgsler er ikke ensartede, de giver forskellige resultater,
MySql optimerer dem på en anden måde og deres planer kan variere.
Se dette enkle eksempel: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);
Første forespørgsel giver 2 rækker:
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 |
Anden forespørgsel giver kun 1 række:
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 |
For at fremskynde denne forespørgsel (den første), kan to bitmapindekser bruges sammen med "bitmap og" operation - men MySql har ikke sådan en funktion.
En anden mulighed er et rumligt indeks ( for eksempel GIN-indekser i PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html
).
Og en anden mulighed er en stjernetransformation (eller et stjerneskema) - du skal "dele" denne tabel i to "dimensions"- eller "mål"-tabeller og en "faktum"-tabel .. .. men dette er for bredt emne, hvis du vil vide mere kan du starte herfra:https:/ /en.wikipedia.org/wiki/Star_schema