1억건이 들어있는 데이터에서 한컬럼을 전체 group by 를 하려고 합니다.
일단 그냥 group by 하면 엄청 느리구요...효율적인 튜닝 포인트가 있을까요?
미리 답변 감사합니다.
일단 엄청이 얼마인지를 모르니,
엄청 느리다고 하는 것을 보면 ᅟ테이블 전체 읽기를 한 모양인가본데,
이런 과정이면, 전체 테이블 크기와 해당 호스트의 읽기 속도를 감안해서,
그 속도가 최대 속도라면, 더 이상 개선할 방법이 없습니다.
이부분은 다른 데이터베이스를 사용한다고 해도 같은 속도를 낼 것입니다.
이게 아니라, select column_name,count(column_name) from table group by column_name 형태의 쿼리라면,
이론 상으로는 해당 칼럼에 인덱스를 만들어 준다면, index only scan 을 할 수도 있을 것입니다. 이런 경우라면, 인덱스 크기만큼의 읽기가 있겠죠.
일단
explain (analyze, buffers) 쿼리문
결과를 보면서 문제를 풀어야 할 것 같네요.
인덱스 만든 다음에 아래꺼 한번 해보세요.
MS SQL에서 Clustered Index와 같은 개념인거 같습니다. 해당 인덱스에 맞게
raw data를 테이블을 재구성 한다. 테이블당 하나만 쓸수 있겠네요
"Clustering on an index"
PostgreSQL supports clustering a table using an index. CLUSTER is used to do that. What
does it do? It reorganizes the table based on the index. Why do we need it? It can greatly
increase performance when you query a range of index values or a single index value with
multiple entries because the queried data is in one place on the disk.
The syntax is as follows:
CLUSTER [VERBOSE] table_name [ USING index_name ]
CLUSTER table_cluster USING table_cluster_idx;
관련 링크
http://www.postgresonline.com/journal/archives/10-How-does-CLUSTER-ON-improve-index-performance.html