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 9032 게시물 읽기
No. 9032
그냥 궁금한 성능면 ...
작성자
김현진(tokssonda)
작성일
2012-10-24 10:34ⓒ
2012-10-24 10:35ⓜ
조회수
9,108

어떤게 효율적인가를 -ㅂ- 잘 판가름할수 없어서 질문을 올려보아요.

혹시 답변해주실수 있는 분이 계시면 부탁드려요 ^ ^

( 물론 질문이 경우에수가 여러가지가 있어서 꼭 이렇다고 할수만은 없겠지만 답변 부탁드려요 ^ ^ )

 

Q1. php에서 select query를 50번 호출할 경우와 subquery 50개를 묶어서 한번 호출한 경우 어떤것이 좋을까요?

 

Q2. subquery와 join을 해야 한다면 어떤것이 효율적인가?

 

Q3. order by limit 1일때 해당 데이터가 100개일때 100개를 가져오는 쿼리문과 동일한데 데이터 1개만 가져오는것인지?

아니면 100개 가져오는것보다 limit 1을 걸었을때 효율적인지 잘 모르겠네요.

 

Q4. 이건 좀 극단적이긴 한데 450만개 레코드를 셀렉트 해서 배열에 담아서 여기서 45만개만 쓰는데요

( 물론 45만개만 select 하면 좋겠지만 450만개중에 45만개 대상을 알수는 없어서요 )

이것과 45만번 select 하는것중에 ... 어떤것이 효율적일까요?

 

( 질문이 다소 -ㅂ- 쌩뚱 맞긴 하지만 ... 궁금한건 어쩔수가 없네요 ㅋㅋ )

그밖에 효율면에서 당연한것이라든지 이렇게하면 좋다든지에 의견 주시면 더없이 좋은 정보로 받아들이겠습니다  ^ ^

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

 제가 아는 선에서 생각해 봤을때만 의견드려 볼께요.

1. subquery 50개 묶어서 한번 호출한것이 더 좋습니다. 실행계획짤때 subquery 50번은 어느정도 정리가 될 수 있겠지만 select query 는 50번을 모두 다 호출해야 하니까요.

2. 요건 테이블 구조 및 데이터 양에 따라 달라 지겠네요.

3. limit 1을 걸면 데이터 찾다가 1개 찾으면 중지합니다. 그러니 limit 1을 거는게 효율적입니다. 100개를 가져오는 쿼리문과 동일한 데이터 1개만 가져오는 것 맞습니다.

4. 450만개 레코드 셀렉트해서 배열에 담아 쓰는게 훨씬 좋습니다. 물론 이것도 45만번 셀렉트와 비교했을때 그렇다는거지 좋은 방법은 아닌것 같습니다.

 

정원천(아리수)님이 2012-10-24 11:48에 작성한 댓글입니다.

좋은 의견 감사드립니다 ^ ^ 효율성 따지기가 쉽지 않네요 ㅎㅎ

김현진(tokssonda)님이 2012-10-25 13:43에 작성한 댓글입니다.

답변을 드리기에는 변수가 너무 많네요.

 

sql이 처리방식이 아닌 원하는 데이터의 집합을 정의한다는 의미를 이해하시면 이 질문의 답이 왜 어려운지 도 이해하실듯 합니다.

 

order by을 예로 들어 볼게요.

 

이 명령은 순서대로 보여달라는 의미인데 db는 데이터를 여러가지 방식으로 이 요구를 처리할수 있습니다.

 

테이블을 다 읽어서 정렬할수도 있고 정렬기준이 되는 컬럼에 인덱스가 있다면 이 인덱스를 활용해서도 원하는 값을 뽑을수 있죠. 옵티마이저가 진화함에 따라 점점 더 많은 처리방법이 생겨날겁니다.

 

join이나 subquery 도 마찬가지 입니다.

 

join 종류만해도 nest looo join, merge join, hash join 등이 있고 join순서도 성능에 중요한 요소가 됩니다.

 

데이터의 사이즈나 인덱스 설계에 따라서도 처리방법은 달라질 수 있고, 같은 처리방법이라고 해도 해당 테이블이 이용되는 패턴( 조회 위주인지, 입력 갱신 위주인지)에 따라서  효율적일수도 아닐수도 있습니다. 사용하시는 db서버의 성능도 변수가 되고요.

 

질문하신 내용의 경우도 그떄그때 여러변수 따라 결과가 달라질겁니다.

 

그 상황에 맞춰 최적의 처리방법을 생각하시고 해당 쿼리가 본인의 생각대로 처리되는지 explain 결과를 보는 연습을 하시는게 중요하다고 생각합니다.


 

백수환님이 2012-10-30 17:54에 작성한 댓글입니다.
이 댓글은 2012-10-30 18:00에 마지막으로 수정되었습니다. Edit

앗 -ㅂ- 수환님!!!

ㅋㅋㅋ 그때 그때 라니 ... 너무 어렵네요 ㅎㅎ

하이간 답변 감사드립니다. ^ ^ 

김현진(tokssonda)님이 2012-11-07 17:54에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9036pgpool watchdog 관련 [1]
김민석
2012-11-07
9228
9035pgadmin III에서 null값 넣기... 도와주세요..ㅠ [5]
조현석
2012-10-31
11435
9033초보 운영 / 튜닝 관련해서 어떤 책이 좋을까요? [1]
정호영
2012-10-25
10340
9032그냥 궁금한 성능면 ... [4]
김현진
2012-10-24
9108
9031DRITA 설정 질문입니다. [5]
김혁민
2012-10-16
11476
9030WindowsXP에서의 Postgres 복구방법 [6]
ㅠ.ㅠ
2012-10-15
11142
9028오라클의 Blob 타입이 PostgreSQL에서는 어느 타입을 써야 ? [1]
정인식
2012-09-18
10491
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다