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 7440 게시물 읽기
No. 7440
프로시져에 대한 질문
작성자
윤일(에블릿)
작성일
2008-06-05 16:00
조회수
6,439

안녕하세요 매일 눈팅만 하다가


질문이 있어 이렇게 몇자 끍쩍해봅니다.


프로시져를 생성에 대한 질문인데요 제가 프로시져를 만든 후에 커밋을 한 후에 


프로시져를 확인해보니깐 


LANGUAGE 'plpgsql' VOLATILE

COST 100

ROWS 1000;

ALTER FUNCTION ............. 


이런식으로 생성이 됩니다. 


제가 생성한 코드중에 COST 100 ROWS 1000 이 생기는데 이유가 뭔지


이걸루 인해서 어떤한 일들이 생기는지에 대해서 궁금합니다. 

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

쿼리 최적화 작업을 할 때, 함수는 그 최적화기가 비용을 얼마나 쓸지, 리턴되는 로우가 몇개인지를 알 수가 없습니다. 그래서, 8.2 버전까지는 기본적으로 비용을 100, 로우가 1000 이렇다고 간주하고 최적화기가 쿼리 수행 계획을 짰습니다. 


이게 8.3부터 바뀌면서 사용자가 자신이 만든 함수에서 기본적으로 넘기는 로우와 비용을 지정할 수 있도록 했습니다. 8.3에서도 이런 값을 특별히 지정하지 않으면 기본값이 사용됩니다. 


좀더 심도 깊게 살펴보고싶으시면, 쿼리 최적화에 대한 DB 엔진부분을 열심히 공부해 보시면 되고요. 귀찮으시면, 무시하셔도 좋습니다. 


대부분의 작업에서는 저 정도의 값이면 특별한 문제 없이 돌아갈터이니 말입니다.

자신이 만든 함수가 로우를 리턴하고 그것이 반드시 1개의 로우만 리턴하는 경우이고, 그것과 조인되는 테이블의 데이터가 아주 많은 경우라면, 

분명 저 row 값을 1이라고 지정해주면 좀 더 다른 양상을 보이겠죠. 

아마도 hash join 에서 nested loop로 바뀔겝니다. 

비용은 엉청나게 줄겠죠. 

김상기(ioseph)님이 2008-06-05 17:07에 작성한 댓글입니다.

아 감사합니다. 

열공모드로 돌입..(^-^);;; 좋은 정보 감사합니다.

윤일(에블릿)님이 2008-06-05 17:24에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7443PostgreSQL lib를 이용한 코딩중 PQexec()함수를 쓰는데... [3]
영광
2008-06-17
6465
7442postgreSQL은 MySQL보다 너무 느리다.?? [4]
성실
2008-06-13
7183
7441CREATE USER 시 사용자가 있는지 검사한 후 사용자 생성방법? [2]
김대청
2008-06-07
6606
7440프로시져에 대한 질문 [2]
윤일
2008-06-05
6439
7439PostgreSQL 'Built-in' Replication [1]
김영우
2008-06-03
6536
7438구글 Summer of code로 알아보는 PostgreSQL의 새로울? 기능들 [2]
신기배
2008-06-01
6855
7437pl/pgsql 함수에서 insert결과 받아오기 [2]
송우진
2008-06-01
7398
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다