2012-04-10 3 views
0

MySQL에서 조건에 따라 쿼리를 정렬하려면 어떻게해야합니까?파일 정렬을 방지하기 위해 ORDER 조건을 최적화하려면 어떻게합니까?

ORDER BY (videos_count > 0) DESC, name 

has_videos 부울 열뿐만 아니라 수를 캐시하는 것이 더 있을까?

+0

http://stackoverflow.com/search?q=[mysql]+filesort –

+0

(video_count, name)에 복합 색인이 있습니까? MySQL이 (함수 때문에) 사용하기에 충분히 영리한 지 확신하지 못하지만, 어쨌든 필요하다. – Thilo

+0

예, 복합 인덱스가 있지만 비교를 수행 할 때 정적 인덱스가 도움이되지 않는다고 생각합니다. – rxgx

답변

1

방법 (필요한 경우에만) 나머지 한 후, 적어도 하나 개의 비디오로 먼저 두에 사람을 쿼리를 분할에 대해 :

select * from video_table 
where video_count > 0 
order by name 

그리고 당신은 그 이상으로 갈 필요가있는 경우 :

select * from video_table 
where video_count = 0 
order by name 
+0

이것은'video_count> 0'보다는'video_count! = 0'과 잘 맞습니다. 그러나 두 개의 유니온 호출은 더 많은 행을 필요로하며 모든 것을 함께 가져 오기 위해 테이블 ​​스캔이 필요합니다. – rxgx

+0

UNION으로 그들을 UNION이라고 부르지 않고 따로 따로 호출하고 첫 번째 것만 필요하면 두 번째를 UNION으로 부른다. 그리고 최악의 경우 행 수가 동일해야합니다 (첫 번째 쿼리 만 실행하면됩니다). – Thilo

0

일반적으로 filesort를 피하기 위해 일반적으로 색인을 누르십시오. 색인을 생성하려면 일반적으로 색인이 열에 대해 생성되므로 일반적으로 노출 된 열 값을 정렬해야합니다).

+0

그것은 video_count> 0 인 것들을 맨 위에 표시하지만, 그 그룹 내에서 이름별로 정렬되지 않습니다 (먼저 video_count로 정렬됩니다). – Thilo

+0

아, 나는 그 비트를 놓쳤다. 이 경우 두 가지로 정렬하고 파일 정렬을 피하려면 다른 열을 추가해야합니다. – Amber

관련 문제