제가 tsquery 타입을 리턴하는 함수를 만들었습니다.
myfunc(text) returns tsquery 와 같이요..
그리고
where tsvector @@ myfunc(string) 하면 원하는 결과는 나옵니다만...
인덱스를 전혀 사용하지 못합니다.
( tsvector 는 컬럼이고 gin index 를 걸었습니다.
myfunc 의 string인자는 그냥 임의의 문자열입니다.)
그런데...
where tsvector @@ (select myfunc(string)) 하면 인덱스를 무지 잘 탑니다.
myfunc 대신에 to_tsquery(mystring) 하면 인덱스를 또 잘 탑니다.
myfunc() 은 string 을 좀 조작하여 최종적으로 to_tsquery() 를 사용하여 tsquery 타입으로 리턴합니다.
왜 to_tsquery() 는 인덱스 잘 타는데 조금 응용한 myfunc은 인덱스를 전혀 타지 못할까요?
왜 별도의 select 를 해 줘야지만 인덱스를 타는지 모르겠습니다.
<추가> gin index 이므로 @@@ 연산자를 사용해봤으나 결과는 마찬가지였습니다.
또한 gist index 에서도 인덱스를 타지 못했습니다.
8.3.3 환경입니다. 리눅스이고
|