현재 PostgreSQL을 사용중인데, like '%XX'%' 를 사용하여 검색을 하니 데이타가 많이 쌓일 경우 속도가 너무 느리게 나온다. 그래서 검색중에 DSN에서 찾은 것이 full text index인 tsearch2이다. full text index 는 쉽게 게시판에서 검색을 할 때 글 내용 검색으로 생각하면 될 것 같다. DBMS별로 해당기능들이 있는것 같으며, PostgreSQL에는 tsearch2를 쓸 수 있다. 아직 한글 검색기능이 없어 해당 기능을 구현하려는 분들의 노고가 보였다.

DSN을 참고로 문의 글까지 올려가며,http://database.sarang.net/?inc=read&aid=5125&criteria=pgsql&subcrit=&id=&limit=20&keyword=tsearch&page=2

http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch2-guide.html 와 같이 참고를 하면서, 테스트를 하였다.

하지만 원래 검색보다 쿼리플랜을 통해 보면, 속도가 더 느리게 나온다. 설정을 잘못한것인가? 일단 언어에 최적화 되어 있는것 같은데, 기본인 simple로 설정해서 사용하였다. 단어별로 vector 형식으로 저장을 하고, gist 인덱스를 사용했다. 무엇이 잘못되었을까? 일단 테이블 두 개를 조인을 하였다. 그제서야 속도 차이가 반대로 나온다. 하지만 만족스럽지 않다. 실 데이타도 인덱스 때문에 크기가 두 배로 늘어난 상태이고, 장점을 못찾겠다. tsvector 형태의 컬럼을 쿼리해보면, y로 끝나는 단어는 i로 변경되어 저장되어 있다. 그리고 예외 단어라고 이해한 기능으로 의문사와 같은 형태의 단어는 저장이 되지 않는다. 계속 테스트 해봐야겠지만, 자주 쓰는 쿼리 결과는 캐시에 저장이 되는지, 1초 이내의 빠른 속도를 보이기도 한다. 하지만 다른 단어를 검색하면, 다시 느려지는 속도를 보면서, 튜닝의 길은 멀구나를 느꼈다.

최적화가 될 때까지 튜닝을 해봐야겠다. 도움주실분? ^^
Posted by dcmru
,