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
운영게시판
최근게시물
MySQL Q&A 29334 게시물 읽기
No. 29334
쿼리 분석좀 해주세요
작성자
최동성(cds0615)
작성일
2009-09-24 14:53
조회수
6,063

T1                   T2                             T3

-----------          ---------------------------    -----------------

PK   NAME            PK     T1_PK      ST     SU    PK   T2_PK     SU

-----------          ---------------------------    -----------------

1    축구공          1        1        상     1     1      1       1

2    농구공          2        1        중     2     2      2       2

3    배구공          3        2        상     1     3      1       1

-----------          4        2        중     5     4      3       3

                     5        3        하     3     5      5       1

                               ---------------------------      -----------------

T1 - 상품마스타

T2 - 상품별재고

T3 - 조정재고


출력

--------------------------------

T1_PK       NAME      SU1      SU2

--------------------------------

1              축구공       3          4

2              농구공       6          3

3              배구공       3          1

--------------------------------

SU1 - 상품재고 합계

SU2 - 조정재고 합계


상품 마스타 20만건정도

상품별 재고 30만건 정도

조정재고는 10만건 정도


SELECT a.PK,a.NAME,b.SU1,c.su1

FROM T1 a LEFT JOIN 

         (select sum(SU) as SU1 from T2 group by T1_PK) b ON b.T1_PK = a.PK

LEFT JOIN 

         (select sum(b.SU) as SU2 from T3 a left join T2 b on b.PK = a.T2_PK group by b.PK) c ON c.T1_PK = a.PK 


결과는 제대로 나오는 것 같은데 속도가 궁금합니다. 자료양 때문에 무지 느립니다.

속도를 높일수 있는 방법니 없을까요?

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

group by 를 하게되면 인덱스를 사용할수가 없을것 같습니다.

 

일단 group by 다음에 order by null 을 한번 줘보시구요...

 

그래도 향상되지 않으면 해당 쿼리에선 향상할수 있는 방법이 없을것 같구요

 

궂이 실시간 조회가 필요하지 않은 쿼리라면

 

create table sum_a (T1_PK, SU1, primary key(T1_PK)) as

select T1_PK, sum(SU) as SU1 from T2 group by T1_PK order by null;

 

create table sum_b (T2_PK, SU2, primary key (T2_PK)) as

select T2_PK,sum(b.SU) as SU2 from T3 a left join T2 b on b.PK = a.T2_PK group by b.PK order by null;

 

SELECT a.PK,a.NAME,b.SU1,c.SU2

FROM T1 a

LEFT JOIN sum_a b ON b.T1_PK = a.PK

LEFT JOIN sum_b c ON c.T1_PK = a.PK ;

 

 

일케하면 훨씬 빨라질겁니다.

지나가다님이 2009-10-09 00:40에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
29337mysqlbinlog 실행시 default-character-set=utf8 에러발생 [1]
스피도
2009-10-01
8283
29336특정 필드가 숫자로 표현되는데 특정 자리수 이상을... [1]
초보김대리
2009-09-28
6326
29335두개의 디비시스템에서 트리거 연동이 가능할까요?
김선아
2009-09-25
6291
29334쿼리 분석좀 해주세요 [1]
최동성
2009-09-24
6063
29333적당한 설정인지 조언 부탁드립니다.
박찬영
2009-09-24
6754
29326프로시저 질문입니다. [1]
흥흥흥
2009-09-23
5751
29325연속된 값을 찾는게 가능한가요?? [3]
Deck
2009-09-22
7415
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다