상기님 지적이 정확하군요. 저도 항상 속도가 느려지면 어디서 느려졌을까 하고 사용한 query 를 가지고 explain 을 해 봅니다. 그렇게 보면 어떻게 index 가 이용되는지 확인이 가능합니다. 그리고 index 를 시스템이 어떤 경우에 사용이 되고 어떤 경우에 사용되지 않는가에 대한 기본 개념을 가지고 query 문을 만들어야 합니다. 상당히 중요한 문제입니다.
>>김상기 님께서 쓰시길<<
:: 지금 제가 고민하고 있는 부분이네요.
:: 저는 이렇게 처리를 했습니다.
::
:: PostgreSQL 명령어인 explain 이라는 명령으로 이용하면,
:: 그 쿼리가 내부적으로 어떤 인덱스를 사용하고,
:: 그 처리순서는 어떻고, 시간이 어느정도 걸렸는지에 대한
:: 정보를 구할 수 있습니다.
::
:: 게시판 구조가
::
:: 일련번호: (절대번호) : primary key
:: 제목:
:: 작성자:
:: 내용:
:: 삭제: (삭제 undo를 위한 필드)
::
:: 이렇게 되어있는데,
::
:: 일반적인 쿼리,
:: select * from board where isdelete = 'f' order by num desc offset 0 limit 20
:: 이런 방식으로 하니,
:: 이상하게 아래의 글 처럼 4/8초 정도 걸리더군요.
::
:: 그래서, 이래저래, 해본 결과,
:: 인덱스를 하나 더 만들었습니다.
:: 일련번호와, 삭제 필드를 함께 인덱스로 하는 것으로.
:: 그리고 쿼리를
:: select * from board where no > 0 and isdelete = 'f' order by num desc offset 0 limit 20
::
:: 이렇게 where 절 부분에서 일련번호가 0보다 크다는 쓸데없는 비교를 넣어주니,
:: 속도는 여느 속도처럼 0.x 초 정도가 나오더군요.
::
:: 핵심은 인덱스와, 쿼리인것 같습니다.
::
::
:: >>김윤한 님께서 쓰시길<<
::
:: ::
:: :: PostgreSQL과 PHP를 연동해서 게시판을 만들었는데요..
:: :: 처음에는 문제가 없었으나.. 데이터가 2만건 정도 쌓이니까..
:: :: 속도가 현저히 느려졌네요.. 반응속도가 4~5초정도 걸리는데요..
:: :: 이 속도를 줄일 퍼포먼스 튜닝 방법이 없을까요?
:: :: 일단 각 int필드에 CREATE INDEX를 해주기는 했는데..
:: :: 그로 인한 속도 향상은 상당히 미미한 수준입니다.. =_=;;
:: :: 고수님들의 답변 부탁드립니다..T.T
:: ::
|