Такова сравнение няма смисъл, тъй като сравнявате ябълки с портокали.
Тези две заявки не са еквивалентни, дават различни резултати,
по този начин MySql ги оптимизира по различен начин и техните планове могат да се различават.
Вижте този прост пример: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);
Първата заявка дава 2 реда:
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 |
Втората заявка дава само 1 ред:
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 |
За да се ускори тази заявка (първата), два индекса на растерни изображения могат да се използват заедно с операция "bitmap и" - но MySql няма такава функция.
Друга опция е пространствен индекс ( например GIN индекси в PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html
).
И друга опция е звездна трансформация (или звездна схема) - трябва да "разделите" тази таблица на две таблици с "измерение" или "мерки" и една таблица с "факти". .. но това е твърде обширна тема, ако искате да знаете повече, можете да започнете от тук:https:/ /en.wikipedia.org/wiki/Star_schema