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;
|