문제

좋아하는 쿼리가 있으면

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

가지고 있습니다 datetime_field 칼럼 인덱스 도움말? IE는 평등 (또는 불평등) 테스트를 사용할 때만 유용한 인덱스입니까, 아니면 순서 비교를 수행 할 때도 유용합니까?

(테이블을 재현하지 않고이 쿼리를 더 잘 실행하기위한 제안도 괜찮을 것입니다!)

도움이 되었습니까?

해결책

아마도. 일반적으로 인덱스가있는 경우 쿼리에 "더 나은"색인이 없으면 해당 인덱스에 범위 스캔을 사용합니다. 그러나 Optimiser가 범위가 너무 커질 것이라고 결정하면 (즉, 행의 1/3 이상을 포함 함) 테이블 스캔이 가능할 가능성이 높기 때문에 인덱스를 전혀 사용하지 않을 것입니다. 더 빠르게.

특정 사례에서 결정을 결정하려면 설명 (선택에 따라 삭제를 설명 할 수 없습니다)을 사용하십시오. 이것은 의존 할 것입니다

  • 테이블에 몇 줄이 있습니까?
  • 범위는 당신이 지정하는 것입니다
  • Where 절에 명시되어 있습니다. "더 좋아 보이는"다른 색인이있는 경우 하나의 인덱스의 범위 스캔을 사용하지 않습니다.

다른 팁

에서 MySQL 참조 매뉴얼:

b-tree 지수는 =,>,> =, <, <= =를 사용하는 표현식에서 열 비교에 또는 연산자간에 사용될 수 있습니다.

많은 행의 경우 테이블 스캔보다 트리 인덱스를 통해 행을 조회하는 것이 훨씬 빠를 수 있습니다. 그러나 다른 대답이 지적한 것처럼 사용하십시오 EXPLAIN MySQL의 결정을 찾기 위해.

DateTime 필드의 색인은 날짜 범위 기반 검색에 확실히 도움이됩니다. 우리는 데이터베이스에서 항상 그것들을 사용하고 쿼리는 인덱스없이 매우 느립니다.

그것은 테이블에서 선택한 설명으로 확인하십시오 ...

MySQL 에이 버그가 없다는 것을 제외하고 http://bugs.mysql.com/bug.php?id=58190

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top