database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7510 게시물 읽기
No. 7510
tsquery 질문드립니다.
작성자
tyro
작성일
2008-08-28 16:54ⓒ
2008-08-28 19:50ⓜ
조회수
5,908

제가 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 환경입니다. 리눅스이고


이 글에 대한 댓글이 총 2건 있습니다.

^-^;; 정확히는 모르겠지만..


function 이 Language SQL


= func_test() 이나 = (select func_test() )


상관없이 인덱스를 사용하고



그외 다른 Langauge 면 func_test() 로만 조건이 왔을때 

인덱스를 안타더군요..


Explain 을 보면


.... From A where a_field1 = func_test();


일때는 Filter 가 a_field1 = func_test()



.... From A Where a_field1 = ( select func_test() );


일때는 Filter 가 a_field1 = $1



요차이인데.. ^-^;;;;


SELECT 하고 RETURN 의 차이인가 ~.~;;;


ㅎㅎ 암튼 왜그른지는 모르겠습니다 >.<;;;


김석래님이 2008-09-01 15:03에 작성한 댓글입니다.
이 댓글은 2008-09-01 15:05에 마지막으로 수정되었습니다. Edit

석래님 답변 감사합니다.


비단 tsquery 의 문제가 아니었군요..


function 은 plpgsql 이었습니다.



다음버젼에선 이런것이 좀 고쳐줬으면 하는 바램입니다.

tyro님이 2008-09-01 18:59에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7513특정시간에 트리거실행방법 [1]
서정주
2008-09-05
6370
7512VACUUM처리시간에 대해서... 어려워서.;;; [4]
초보
2008-09-02
6459
7511원격접속에대해...고수님들 헬미요 ㅠㅠ [2]
김성태
2008-08-28
6652
7510tsquery 질문드립니다. [2]
tyro
2008-08-28
5908
7509postgresql 트리거 관련입니다. [6]
포스트
2008-08-25
6512
7508도와주세요!!! PHP, PostgreSQL 왕초보자입니다. [2]
iamgimgw
2008-08-24
6656
7507pgadmin에서 primary key를 어떻게 입력하는지.. [1]
김동만
2008-08-22
8099
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다