2013-02-02 2 views
2

나는 ORDER BY라는 datetime 열이있는 테이블을 가지고있다. 내가 무엇을 하든지, 나는 EXPLAIN에서 "filesort를 사용하여 어디에서 사용하고 있는가?"이 쿼리는 Filesort를 사용하지 않을 수 있습니까?

datetime 열에서 ORDER BY를 사용하여 filesort를 사용하지 않을 방법이 있습니까?

쿼리가 매우 간단하고 그래서 다음과 같습니다

SELECT * FROM table1 WHERE creator_id = 1 AND user_id != 1 ORDER BY created DESC LIMIT 5

지수는 creator_id에 있고 USER_ID 나는 그것이 인덱스에 만들 것이다, 따라서 기본적으로 항상 고유 한 이후 생성에 인덱스를 넣어 할 이유가 없다 모든 항목 즉, 테이블만큼 큰.

편집 : 필자는 인덱스를 만들 때 동일한 결과를 얻으려고 시도했음을 언급해야합니다.

+0

이 테이블은 얼마나 큽니까? 얼마나 많은 행, 일반적인 행 너비, 총 테이블 크기 (MB)입니까? – mvp

+0

샘플 코드 – Afsar

+0

샘플 코드가 추가되었습니다. 테이블의 행 수가 200,000 ~ 1,000,000 개입니다. 이 순간 테이블은 413,000 개의 행을 가지며 53MB 크기입니다. 그것은 8 개의 열을 가지고 있습니다. 특이한 즉 varchars, datetimes 및 bigints가 없습니다. – Adergaard

답변

1

(creator_id, created)에 복합 색인을 만드는 경우 쿼리가 훨씬 빠르게 작동해야합니다.

쿼리 플래너는 인덱스의 첫 번째 부분 인 creator_id을 사용하여 WHERE 제약 조건을 충족시키고 두 번째 부분 인을 정렬 할 것입니다.

+0

감사합니다. 나는 세 가지 모두에 대해 색인을 가지고 있었다. 이것은 차이를 만들지 않았지만 차이는 없었습니다. 책에 대한 자세한 정보를 얻을 수 있다면 정말 고맙겠습니다. – Adergaard

관련 문제