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 9385 게시물 읽기
No. 9385
subquery vs query + foreach 효율성 어떤게 좋을까요?
작성자
김현진(tokssonda)
작성일
2013-12-12 10:58ⓒ
2013-12-12 11:01ⓜ
조회수
10,856

데이터에 따라 두개에 효율성이 다르겠지만 가정을 한번 해볼게요 - *

 

a, b 컬럼 t 테이블

2013-12-01 01:00:00, 100

2013-12-01 02:00:00, 200

2013-12-01 03:00:00, 50

2013-12-02 01:00:00, 10

2013-12-02 04:00:00, 200

2013-12-02 06:00:00, 5000

 

위에 처럼 내용이 있는데 건수는 날짜별로 시간별로 24개 년수는 20년에 데이터가

저장되있다고 가정합니다.

이때 날짜별로 가장 마지막에 들어온 row에 b값을 질의해야 하는데요 - *

 

1. subquery

select a.a, (select b from t where to_char(a, 'YYYY-MM-DD') = a.a order by a desc limit 1) as b

from ( select to_char(a, 'YYYY-MM-DD') as a from t where a between '2000-01-01 00:00:01' and '2010-12-31 24:00:00' ) a order by a.a asc

 

2. query + php

select a, b, to_char(a, 'YYYY-MM-DD') c from t where a between '2000-01-01 00:00:01' and '2010-12-31 24:00:00' order by a asc;

. return $rows

foreach ($rows as $v) {

$return[$v['c']] = $v['b'];

}

 

이중 효율성이 어떤게 좋을까요? 여러분들의 의견 부탁드립니다. ㅋㅋ

explain 확인시 2번째 쿼리가 빠르긴 하더라고요. 그래서 php 단으로 해결하는게 좋을지 ...

아니면 다른 의견 있으셔도 ^ ^ 얘기좀 해주세요.

별거 아닌거 같은데 신경이 쓰여서 질문 올려요 - *

 

 

 

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

통상 DB안에서만 이야기하면, 

그리고 저에게 이 문제를 풀어라고 하면, 

윈도우 함수를 사용할 것 같네요. 

select a,b from
(
  select
    to_char(a,'YYYY-MM-DD') as a,
    last_value(b) over(PARTITION BY to_char(a,'YYYY-MM-DD')) as b
  from t
 where a between '2000-01-01 00:00:01' and '2010-12-31 24:00:00'
group by a,b order by a
 
 
그런데, 이 쿼리가 inline view에 대한 집계작업인지라, inline view의 집합이 커지면
비용이 많이 들 것 같네요.
그때는 응용프로그램에 마지막 로우를 구하는 방식으로 옮기는게 맞을 것 같습니다.
 
일단 from 앞 칼럼 정의부분에 서브쿼리를 사용하는 방법은 상당히 비효율적입니다. 
 
여튼 딱히 좋은 묘책이 떠 오르질 않네요. 
누가 더 나은 쿼리를 작성해 주시길 기대해 봅니다. 
 
김상기(ioseph)님이 2013-12-13 14:56에 작성한 댓글입니다.

상기님 댓글 감사드립니다.

김현진(tokssonda)님이 2014-01-29 13:15에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9388명령어 질문 [1]
조승재
2013-12-17
10109
9387사용자 생성 및 권한 주기.. [1]
권기혁
2013-12-16
10580
9386pg_dump error (꼭좀 봐주세요) [1]
주은철
2013-12-13
11588
9385subquery vs query + foreach 효율성 어떤게 좋을까요? [2]
김현진
2013-12-12
10856
9384php에서 utf-8 postgresql이용시 에러입니다. [1]
이기자
2013-12-11
3032054
9382select시 질문입니다. [1]
한동율
2013-12-07
10483
9381맥에서 Pgsql 한국어 인터페이스 설정 방법? [1]
souler
2013-12-06
10500
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.054초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다