2011-08-19 4 views
3

필자는 텍스트 필드가있는 큰 테이블을 가지고 있으며 ILIKE를 사용하여 주어진 테이블 문자열을 포함하는 레코드를 찾기 위해이 테이블에 대한 쿼리를 만들고 싶습니다. 그것은 작은 테이블에서 완벽하게 작동하지만, 제 경우에는 시간 소모적 인 작업이며, 웹 사이트의 실시간 검색 필드에서 사용하기 때문에 빠르게 작동해야합니다. 어떤 아이디어라도 감사 할 것입니다 ...큰 테이블에서 하위 문자열 일치 쿼리를 빠르게 수행하는 방법은 무엇입니까?

+0

또한보십시오 http://stackoverflow.com/questions/17633344/is-there-a-way-to-index-in-postgres-for-fast-substring-searches – rogerdpack

답변

1

확인을 depesz에서 Waiting for 9.1 – Faster LIKE/ILIKE 블로그 게시물을 괘를 사용하여 솔루션을.

아직 출시되지 않은 PostgreSQL 9.1을 사용해야합니다. 그리고 당신의 글은 삼각 색인이 거대하기 때문에 훨씬 느릴 것입니다.

전체 텍스트 검색 suggested by user12861은 하위 문자열이 아닌 단어를 검색하는 경우에만 도움이됩니다.

+0

나는 trigrams를 시도하고 a) 색인이 비정상적으로 거대하다. b) 검색 속도가 너무 느리다. 모든 단어의 모든 가능한 하위 문자열을 포함하는 테이블을 만들려고했습니다. 기록의 양은 훨씬 많지만 검색 속도가 빨라졌습니다. 그래도 1-2 문자를 포함하는 쿼리에 대해 10 초 이상을 생각합니다. 나는 무엇을 해야할지 모르겠다. ( –

+0

1-2 문자 쿼리에 대해서는 더 빨리 얻을 수 없다. 이러한 쿼리는 많은 수의 행을 반환해야하기 때문에 인덱스가 도움이되지 않을 것이다. – Tometzky

+0

@Tometzky : 귀하의 진술 당신이 그것에 대해 생각할 때 사실로 울리는 것처럼 보이는데, 와일드 카드 문자열과 상관없이 모든 프로그램이 어떻게 (http://www.voidtools.com/) 같은 프로그램을하는지 궁금합니다. – Aktau

관련 문제