MySQL индекс для поля даты и времени не соответствует типу RANGE, вместо этого используется тип INDEX - PullRequest
1 голос
/ 06 января 2020

Я хотел бы знать, почему этот индекс не используется в типе RANGE, а вместо этого INDEX:

index:

CREATE INDEX myindex ON orders(order_date);

query:

EXPLAIN 
SELECT order_date FROM orders 
WHERE order_date BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59';

на выходе столбец TYPE установлен на INDEX. По моему мнению, он должен найти первую запись в индексе с датой, превышающей первую, а затем go через связанный список, но если это так, тип должен быть range, а не INDEX.

Кроме того, также используя force index(report_ordini_per_utente_in_un_periodo) в предложении from, тип все еще index

Я использую MariaBD 10.1.43

Ответы [ 2 ]

0 голосов
/ 13 января 2020

В указанном вами запросе ровно один столбец. И этот столбец находится в индексе. Итак, индекс «покрытие». Следовательно, EXPLAIN скажет Using index.

Каков диапазон дат в таблице?

Для дальнейшего обсуждения, пожалуйста, предоставьте SHOW CREATE TABLE и все EXPLAIN выходные данные , Там могут быть тонкие вещи, которые были оставлены в вашей прозе.

0 голосов
/ 06 января 2020

Оказывается, что-то вроде ошибки, потому что все записи, которые у меня были в моей базе данных, были внутри этого диапазона, и поэтому он, очевидно, прошел go по всему индексу, и именно поэтому он помечает TYPE как INDEX вместо RANGE. Более странным является то, что, скажем, запрос имел order_date between X and Y, если дата всех записей имеет значение больше X, но не все записи имеют дату ниже Y, он также помечает его как INDEX, а не RANGE

...