데이타가 1000만건 이상의 테이블에서 스코어별 상위 1000 명을 뽑고자 합니다.
select aaa from kk order by aaa desc limit 1000;
데이타 정렬시 1000만건을 정렬하다보니 속도가 너무나 느린 현상 입니다.
어떤식으로 하면 좋을지 조언 부탁 드립니다.
질의 계획을 검토해 보십시오.
EXPLAIN ANALYZE select aaa from kk order by aaa desc limit 1000;
이렇게 하면 해당 질의문을 어떻게 처리하고 그 비용은 얼마인지 나올것입니다. 아마도 인덱스가 적절하게 만들어져있지 않거나 설정이 잘못 되었을 가능성 또는 시스템의 능력보다 많은 자료량이 문제 일 수 있겠네요.
질의 계획은 이미 검토를 해보았습니다.
data sort 시에 cost가 많이 발생하고 있습니다.
order by aaa desc 방법을 제외 하고 스코어별 상위 1000 명을 뽑는 방법이 없을까요?
aaa가 index를 타는데도 그렇게 오래걸릴수는 없어보입니다
제가 지금운용하고있는 태이블이 4000만건이 넘는데
이와비슷한쿼리로 바로나오거든요
질의 계획을 검토해 보라고 말씀 드리면서 구체적인 내용을 알려주시기를 바랬는데 결과만 말씀하시네요.
결론만 가지고는 도움을 드릴 수 없어 보이네요.
아마도 인덱스가 없거나 있어도 사용하고 있지 않는 것 같습니다.
analyze나 vacuum analyze는 했겠죠?
이 경우라면, 인덱스를 쓰지 않는다면, 어느 DB나 느릴 수 밖에 없을 것 같네요.
그 정렬 되는 칼럼 자료를 기준으로 하는 인덱스가 하나 있어야겠는데,
문제는 select aaa from kk order by aaa desc limit 1000 여기서 where 절이 있다면, 인덱스를 어떻게 만들것인가도 고민을 해야할 것같네요. 인덱스만으로 해결못한다면, 통계용 테이블을 따로 만들어야할 것도 같네요.
질문이 너무 개괄적이여서 개괄적인 답변밖에는 못드리겠습니다.
윗 질문만 놓고 본다면, 단순히 aaa 칼럼에 인덱스를 하나 만들어보십시오. 그럼 윗 쿼리라면, 분명히 사용할 터이이고, 깔끔하게 움직일겝니다.