programing

RANGE 유형이 아닌 대신 INDEX 유형을 사용하는 날짜/시간 필드의 MySQL 인덱스

starjava 2023. 9. 4. 19:29
반응형

RANGE 유형이 아닌 대신 INDEX 유형을 사용하는 날짜/시간 필드의 MySQL 인덱스

이 인덱스가 왜 사용되지 않는지 알고 싶습니다.RANGE입력, 대신INDEX:

색인:

CREATE INDEX myindex ON orders(order_date);

쿼리:

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제 생각에는 인덱스에서 날짜가 첫 번째보다 큰 첫 번째 레코드를 찾은 다음 링크된 목록을 거쳐야 하지만, 만약 그렇다면 type은range,것은 아니다.INDEX.

게다가, 또한 사용합니다.force index(report_ordini_per_utente_in_un_periodo) 에서from절, 형식은 그대로입니다.index

MariaBD 10.1.43을 사용합니다.

일종의 버그인 것으로 밝혀졌습니다. 왜냐하면 제 데이터베이스에 있는 모든 기록이 그 범위 안에 있었기 때문입니다. 그래서 그것은 분명히 전체 색인을 거쳐야 하고, 그것이 왜 그것을 표시하는지에 대한 것입니다.TYPE~하듯이INDEX대신에RANGE더 이상한 것은, 쿼리가order_date between X and Y모든 레코드의 날짜가 X보다 크지만 모든 레코드의 날짜가 Y보다 낮은 것은 아닐 경우, 다음과 같이 표시합니다.INDEX그리고 아닌RANGE

제공한 쿼리에는 열이 하나만 있습니다.그리고 그 열은 색인에 있습니다.지수는 "커버링"입니다.그러므로EXPLAIN라고 말할 것입니다Using index.

표의 날짜 범위는 어떻게 됩니까?

추가적인 논의를 위해, 제공해 주십시오.SHOW CREATE TABLE그리고 모든 것들EXPLAIN산출량.당신의 산문에는 미묘한 것들이 빠져 있을 수 있습니다.

언급URL : https://stackoverflow.com/questions/59604913/mysql-index-on-datetime-field-not-going-range-type-instead-is-using-index-type

반응형