그래서 나는 다음과 같은 쿼리가 : 어떤 이유MySQL은 심지어 사용 지수와 힘 인덱스 이후에 생성 된 인덱스를 사용하지
EXPLAIN
SELECT
id,
name,
title,
description,
time
FROM entity
WHERE
(date_end > CURRENT_DATE
OR (date_end = CURRENT_DATE AND time_end >= CURRENT_TIME)
)
AND (next_date < CURRENT_DATE
OR (next_date = CURRENT_DATE AND next_time <= CURRENT_TIME)
)
를, MySQL은 것을 처리하기 위해 나는이 만들어진 인덱스 (NEXT_DATE, DATE_END)를 사용하지 않는 질문.
내가 할 경우 :
EXPLAIN SELECT id, name, title, description, time FROM entity WHERE (date_end = CURRENT_DATE AND time_end >= CURRENT_TIME)
그것은
그것은 쿼리에 문제를 보인다 I가 만든 지수 (DATE_END)를 사용하지 않습니다이 부분 DATE_END> CURRENT_DATE와 next_call < CURRENT_DATE입니다 - 때 그 두 부분이 추가되고 인덱스가 사용되지 않습니다.
USE INDEX
과 FORCE INDEX
을 사용해 보았지만 동일한 결과 - 색인이 사용되지 않았습니다. 나는 또한 ANALYZE TABLE
을 시도했다.
내 테이블 엔티티는 id가 기본 키이고 date_end, next_date 및 (next_date, date_end)에 인덱스가있는 INNODB 테이블입니다.
(next_date, date_end) 대신에 결합 된 인덱스를 만드는 이유는 무엇입니까? next_date의 단순 인덱스? –
테이블의 행 수 일부 쿼리 최적화 프로그램은 행 수가 적을 경우 인덱스를 무시하며 인덱스 페이지를 읽는 오버 헤드가 테이블 스캔 비용을 초과 할 수 있습니다. – james