2012-06-16 5 views
1

내가 만드는 웹 사이트에 "이벤트"가 있습니다. 이벤트에는 제목, 날짜 및 관련 인물의 사용자 ID가 있습니다. 이벤트는 누군가를 따라가는 것, 새로운 포스트를 만드는 것 등 모든 것이 될 수 있습니다. 모든 이벤트를 단일 테이블에 저장하는 것을 생각하고 있었지만이 작업이 매우 빠르게 진행되는 것을 볼 수있었습니다.거대한 PostgreSQL 테이블의 성능 문제

내가 제대로하고 있습니까? 특정 사용자와 관련된 이벤트를 테이블에서 검색해야 할 때 시스템에 얼마나 많은 요금이 부과됩니까? 어떻게 든 그것을 최적화 할 수 있을까요?

답변

1

WHERE 절에서 가장 자주 사용하는 열에 인덱스를 추가합니다 (예 : 특정 사용자와 관련된 모든 이벤트를 자주 선택하는 경우 user_id 열에 인덱스를 만들어야합니다.

http://www.postgresql.org/docs/9.1/static/sql-createindex.html

+1

이것은 좋은 생각이 아닙니다. 테이블에 많은 양의 쓰기가 발생하면 인덱스를 추가하면 실제로 전체 시스템이 느려질 수 있습니다! – Oleksi

0

는만큼 해당 테이블의 데이터가 normalized입니다, 당신은 확인을해야합니다. 해당 테이블에 대한 읽기 쿼리 속도가 느려지면 일부 열에 인덱스를 추가 할 수 있지만이 테이블에 대한 쓰기 속도가 느려집니다.

성능이 너무 느리다면 큰 테이블에 더 잘 최적화 된 NoSQL 데이터베이스를 사용하는 것으로 전환 할 수 있습니다. 테이블이 정말 큰 것입니다 경우

+0

읽기/쓰기시 성능 문제가 나타나기 시작하는 테이블 크기에 대한 아이디어를 나에게 줄 수 있습니까? 우리는 지연을보기 위해 수백, 수천, 수십만 항목의 이야기를하고 있습니까? – n0pe

+1

특정 데이터베이스 및 쿼리에 대한 측정을 수행하지 않고도 말하기는 어렵지만, 수십만 개 정도가됩니다. – Oleksi