2013-10-03 3 views
0

저는 MySQL을 사용하고 있으며 다른 인덱스에 저장할 데이터의 표준 버전으로 사용하려고하는 데이터베이스가 있습니다. 즉, 기본 키를 사용하여 데이터 집합을 신속하게 검색 할 수 있어야하지만 그 데이터를 순서대로 정렬해야합니다. MySQL이 효율적으로 그렇게 할 수있는 방법을 알 수 없습니다.기본 키로 검색 한 다음 정렬하십시오.

내 표는 다음과 같습니다 :

CREATE TABLE demo.widgets (
    id INT AUTO_INCREMENT, 
    -- lots more information I need 
    awesomeness INT, 
    PRIMARY KEY (id), 
    INDEX IDX_AWESOMENESS (awesomeness), 
    INDEX IDX_ID_AWESOMENESS (id, awesomeness) 
); 

그리고 난의 라인을 따라 뭔가하고 싶은 :

SELECT * 
FROM demo.widgets 
WHERE id IN (
    1, 
    2, 
    3, 
    5, 
    8, 
    13 -- you get the idea 
) 
ORDER BY awesomeness 
LIMIT 50; 

을하지만 불행하게도 나는이 밖으로 좋은 성능을 얻을 수없는 것 . 항상 filesort에 의존해야합니다. 이 설정에서 더 나은 성능을 얻을 수있는 방법이 있습니까? 아니면 다른 데이터베이스를 고려해야합니까?

답변

0

페치 그 같은 검색 최적화 된 쿼리를 얻기 위하여, 당신은 키가 필요가있는 기본과 같이 다음 정렬 순서와 :

create table if not exists test.fetch_sort (
    id int primary key, 
    val int, 
    key val_id (val, id) 
); 

insert into test.fetch_sort 
values (1, 10), (2, 5), (3, 30); 

explain 
select * 
from test.fetch_sort 
where id in (1, 2, 3) 
order by val; 

이 단지를 사용하는 쿼리를 줄 것이다 검색/정렬을위한 인덱스.

0

자세한 내용은 ORDER BY Optimization 설명서에 설명되어 있습니다. 특히 WHERE 절에서 행을 선택하는 데 사용 된 인덱스가 ORDER BY에서 사용 된 인덱스와 다른 경우 ORDER BY에 대한 인덱스를 사용할 수 없습니다.

+0

나는 그것이 작동하지 않는 이유를 이해합니다. 이 쿼리에서'WHERE'와'ORDER BY'를 만족시킬 수있는 인덱스가 있는지 알고 싶습니다. –

관련 문제