2011-12-07 10 views
0

를 사용하여 내가 쿼리 다음과 같은 한 :MySQL의 쿼리 최적화 - 인덱스

select from `table` where `a`>0 order by `b` desc limit 0, 10 
select from `table` where `a`<0 order by `b` desc limit 0, 10 

나는 그들에게 가능한 한 빨리 실행합니다. 이제 문제는 무엇이 최선의 해결책입니까?

  • 가 B의 멀티 컬럼 인덱스를 생성 b를

    내 생각 엔 멀티 컬럼 인덱스를 사용하여 줄 것이다, B

  • A의 멀티 컬럼 인덱스를 생성하기위한 만듭니다에 대한 인덱스를 인덱스를 생성 최상의 결과 ...하지만 열의 올바른 순서는 무엇입니까? MySQL은 먼저 열 a과 일치하고 b 또는 b이 먼저 a이됩니까?

    덕분에 (a,b)

  • +1

    EXPLAIN의 내용은 무엇입니까? –

    +0

    이 경우 복합 색인이 도움이되지 않습니다. –

    +0

    테이블에서'a> 0 '과'a <0'을위한 행의 percenatge는 무엇입니까? –

    답변

    0

    지수는 빠르게 작동합니다. 인덱스도 사용할 수 있습니다

    문서는 ORDER BY만큼 열 BY 인덱스의 사용되지 않는 부분과 모든 여분의 ORDER의 모든으로 상수는 정확히 인덱스와 일치하지 않는 경우에도 말한다 WHERE 절에.

    이제> 0이 상수로 간주 될 수 있다고 생각합니다. 그러면 인덱스 (a, b)가 모두 빠르게 작동 할 수 있습니다. 당신이 ans를 시도하고 싶어 할지도 모르지만 explain plan을 보아라.

    http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

    0

    이론은 항상이 벤치 마크가 실제로는 한 가지입니다.