Мне нужна помощь с этим. У меня есть такой запрос:
SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199);
Приведенный выше запрос использует индекс btree для ts_in colomn (тип диапазона). Теперь я хочу добавить еще один критерий к этому. Например:
SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) and is_removed=0;
Приведенный выше запрос не использует индекс btree для ts_in colomn (диапазон).
Может кто-нибудь сказать мне, почему и как я могу сделать это правильно, чтобы достичь очень быстрых вычислений.
Я создал два индекса для тестирования:
CREATE INDEX range_idx_1 using BTREE
ON cart (is_removed, ts_in);
и
CREATE INDEX range_idx_2 using BTREE
ON cart (ts_in , is_removed);
Что смешного в том, что когда я использую этот запрос:
EXPLAIN SELECT id FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) AND is_removed=0;
Я получаю эти результаты:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | cart | range | range_idx_1,range_idx_2 | range_idx_1 | 6 | | 17391 | Using where; Using index
Приведенный выше запрос использует индекс, но:
EXPLAIN SELECT * FROM cart WHERE
(ts_in between 1249077600 AND 1318975199) AND is_removed=0;
У меня есть такие результаты:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | cart | ref | range_idx_1,range_idx_2 | range_idx_1 | 1 | const | 77979 | Using where
Индекс не используется.
Когда я пытаюсь использовать синтаксис INDEX или FORCE INDEX, результаты совпадают. В одном случае Mysql не использует индекс. Любая помощь?