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 8662 게시물 읽기
No. 8662
explain 사용 관련 문의 입니다.
작성자
정민준(wicked79)
작성일
2010-05-02 18:48ⓒ
2010-05-02 18:56ⓜ
조회수
7,640

1)번과 2)번 모두 1행의 결과를 리턴합니다.

하지만, 1번의 경우 rows=1000 으로 결과가 나오고 있습니다.

그리고, 프로시져를 사용했을때에는 인덱스를 사용한다는 문구가 나오지 않습니다.

혹시, 이런 현상에 대해서 알고 계신분이 있을까 해서, 질문 올립니다.

 

테스트 테이블에는 10만건 정도의 데이타가 들어있으며, serialid 컬럼이 pkey로 잡혀있습니다.

아래에, 테이블정보와 프로시져도 첨부 했습니다.

 

1) explain select * from test_sp(123456);
    Function Scan on test_sp  (cost=0.00..12.50 rows=1000 width=44)

 

2) explain select * from test_table where SerialID = 123456;
     Index Scan using test_table_pkey on test_table  (cost=0.00..5.31 rows=1 width=44)
     Index Cond: (serialid = 123456)

 

==================================================================================================
CREATE TABLE test_table
(
  serialid bigint NOT NULL DEFAULT 0,
  option1 integer NOT NULL DEFAULT 0,
  option2 integer NOT NULL DEFAULT 0,
  option3 integer NOT NULL DEFAULT 0,
  option4 integer NOT NULL DEFAULT 0,
  option5 integer NOT NULL DEFAULT 0,
  option6 integer NOT NULL DEFAULT 0,
  option7 integer NOT NULL DEFAULT 0,
  option8 integer NOT NULL DEFAULT 0,
  option9 integer NOT NULL DEFAULT 0,
  CONSTRAINT test_table_pkey PRIMARY KEY (serialid)
)
WITH OIDS;


==================================================================================================
CREATE OR REPLACE FUNCTION test_sp(bigint)
  RETURNS SETOF test_table AS
$BODY$

DECLARE
 _SerialID ALIAS FOR $1;
 _data test_table%rowtype;

BEGIN

FOR _data IN SELECT ' SELECT * from test_table where SerialID = '''|| _SerialID ||'''; '

LOOP
         RETURN NEXT _data;
END LOOP;

RETURN;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION test_sp(bigint) OWNER TO postgres;

 

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

PostgreSQL의 쿼리 최적화 기능이 아직 거기까지 미치질 못합니다.

당연한 결과이니, 프로시져 만드는 사람의 퀴리 최적화를 믿는 수 밖에요.

 

김상기(ioseph)님이 2010-05-03 09:44에 작성한 댓글입니다.

답변 감사합니다.

조사하다보니, 프로시져에서 직접 인덱스를 사용하는데에는 여러 조건이 필요하네요..

 

정민준(wicked79)님이 2010-05-03 11:14에 작성한 댓글입니다.
이 댓글은 2010-05-03 20:15에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
8665중복 때문에 그러는데요..ㅠㅠ 도와주세요 [3]
최용은
2010-05-10
7487
8664[질문] 데이터를 생성된 날짜별로 자동으로 지우는 방법 [1]
질문
2010-05-09
8260
8663인코딩 질문드립니다.
서버
2010-05-07
8623
8662explain 사용 관련 문의 입니다. [2]
정민준
2010-05-02
7640
8661테이블 필드 속성 수정시 view [2]
송효진
2010-05-01
7470
8660enterprisedb.com 접속 문제 여쭙습니다 [6]
이두기
2010-04-25
7842
8658쿼리문이 실행이 안되요...ㅠㅠ
조정희
2010-04-22
7551
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다