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 10047 게시물 읽기
No. 10047
select 쿼리가 너무 느려요 제발 도와주세요
작성자
김민혁
작성일
2019-03-08 14:26:00
조회수
270

 

 

SELECT f.order_time,

    f.code,

    f.1_buy_price,

    f.1_buy_qty,

    f.1_sell_price,

    f.1_sell_qty,

    f.2_buy_price,

    f.2_buy_qty,

    f.2_sell_price,

    f.2_sell_qty,

    f.3_buy_price,

    f.3_buy_qty,

    f.3_sell_price,

    f.3_sell_qty,

    f.4_buy_price,

    f.4_buy_qty,

    f.4_sell_price,

    f.4_sell_qty,

    f.5_buy_price,

    f.5_buy_qty,

    f.5_sell_price,

    f.5_sell_qty

   FROM ( SELECT a.order_time,

            a.code,

            a.buy_price AS 1_buy_price,

            a.buy_qty AS 1_buy_qty,

            a.sell_price AS 1_sell_price,

            a.sell_qty AS 1_sell_qty,

            b.buy_price AS 2_buy_price,

            b.buy_qty AS 2_buy_qty,

            b.sell_price AS 2_sell_price,

            b.sell_qty AS 2_sell_qty,

            c.buy_price AS 3_buy_price,

            c.buy_qty AS 3_buy_qty,

            c.sell_price AS 3_sell_price,

            c.sell_qty AS 3_sell_qty,

            d.buy_price AS 4_buy_price,

            d.buy_qty AS 4_buy_qty,

            d.sell_price AS 4_sell_price,

            d.sell_qty AS 4_sell_qty,

            e.buy_price AS 5_buy_price,

            e.buy_qty AS 5_buy_qty,

            e.sell_price AS 5_sell_price,

            e.sell_qty AS 5_sell_qty

           FROM data a

             LEFT JOIN data b ON b.code = '100001' AND a.order_time = b.order_time AND a.code = b.code

             LEFT JOIN data c ON c.code = '100002' AND a.order_time = c.order_time AND a.code = c.code

             LEFT JOIN data d ON d.code = '100003' AND a.order_time = d.order_time AND a.code = d.code

             LEFT JOIN data e ON e.code= '100004' AND a.order_time = e.order_time AND a.code = e.code

          WHERE a.code = '100000' 

AND a.code = 'ETH'

and a.order_time like '2019-03-07%') f

 

전체 쿼리는 위와 같습니다. 하루 2천만건 이상 쌓이는 테이블에서 하루치 데이터를 한로우에 나올 수 있도록 하기 위해서 이런식으로 쿼리를 작성 했지만 

30초 이상 걸리는 문제로 인해 고민에 빠졌습니다. 

좀더 빠르게 셀렉트 할 수 있는 해결방법이 있을까요? ㅜ.ㅜ 

한번 보시고 한번만 살려주세요 ㅜ.ㅜ

읽어 주셔셔 감사합니다.

 

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

자료가 나오는 쿼리인가요?

a.code = '...' and a.code = '...' 상호 배타적이기에, 즉 A 테이블의 자료가 없기 때문에, b, c, d, e 테이블의 outer join 작업도 일어나지 않을 것 같은데요.

여튼 b,c,d,e 테이블 outer join 때문에, 이 쿼리는 nested loop로 실행계획이 짜여질것같네요.

이 경우는 nested loop 작업의 최적화 방법을 공부하셔서 풀어야합니다. 즉, A 결과값을 최소화하고, join 될 조건이 인덱스를 잘 사용하게 하고, 그 인덱스의 크기는 최적화 되어야 하고, 등등...

김상기(ioseph)님이 2019-03-10 02:40:28에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10050터미널창에서 db 접속이 되지 않습니다 [1]
탁구공
2019-03-13
246
10049여러개의 csv 파일을 한번에 import 시키고 싶은데 방법이 없을까요? [1]
상킴
2019-03-12
184
10048query plan에 merge append 는 언제 하게되는건가요?? [1]
test
2019-03-11
170
10047select 쿼리가 너무 느려요 제발 도와주세요 [1]
김민혁
2019-03-08
270
10046컬럼값 find ?? 같은 기능 없나요? [2]
이기자
2019-03-06
207
10045bom 관련 Function 만들기 error좀 봐주세요 [3]
이규석
2019-03-06
209
10044postgresql login 패스워드 확인 [5]
인규리
2019-03-05
235
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.065초, 이곳 서비스는
	PostgreSQL v11.3으로 자료를 관리합니다