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 27588 게시물 읽기
No. 27588
[질문] union을 이용해 검색을 하는데 속도를 빠르게 할 수 있는 방법 없을까요?
작성자
안중경(systemfile)
작성일
2008-06-05 13:59
조회수
4,990

하루 종일 고민하다 여기에 적어 봅니다..ㅡㄴㅡ


MYSQL을 이용하여 데이터를 뽑고 있습니다


테이블이 3개가 있습니다.

각각 A, B, C 라고 하고

구조는 다음과 같이 똑같습니다

id varchar(8)

day varchar(8)


A는 20만건

B는 180만건

C는 150만건의 로우가 있구요.


원하는 결과는 A , B , C 테이블에서 일정기간 이전에 존재하는 모든 ID를 유니크하게 뽑아내는 겁니다.


제가 쓰는 쿼리는 이렇습니다

select count(distinct x.id) event from

 ((select id from A where day<=20080531)

 union all

 (select id from B where day<=20080531)

 union all

 (select id from C where day<=20080531)

 ) x


실행계획(explain 결과는 )

1  | PRIMARY| <derived2>| ALL   | NULL | NULL | NULL | NULL | 498804 ||

2  | DERIVED| A| ref  | IDX_DAY | IDX_DAY | 5 |      | 37871 | Using where |

3  | UNION  | B| ref  | IDX_DAY | IDX_DAY | 5 |      | 114103 | Using where |

4  | UNION  | C| ref  | IDX_DAY | IDX_DAY | 5 |      | 170692 | Using where |

NULL | UNION RESULT | <union2,3,4>| ALL  | NULL | NULL | NULL | NULL | NULL ||

으로 약 5.6초가 걸리네요.


union all 이후에 full scan을 해서 시간이 오래 걸린다는 건 알겠는데....

이거 극복해 내는 방법 없을까요?

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

별로 도움이 안될 것 같지만, 각 테이블에서 뽑아오는 서브 쿼리에서 group by id( 혹은 distinct id )로 가져오게 한다면 union all을 통해 생성되는 temporary set의 크기가 작아지며 빨라질 듯 한데요... 혹시 시도해보셨나요?

박현우(lqez)님이 2008-06-17 00:48에 작성한 댓글입니다.
이 댓글은 2008-06-17 00:48에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
27591mysql 초보유저 - function 생성이 안됩니다.. 도와주세요.. [2]
정준철
2008-06-07
4710
27590.. [1]
장경칩
2008-06-06
3480
27589파일로 테이블 생성할 수는 없나요? [1]
김성현
2008-06-05
3168
27588[질문] union을 이용해 검색을 하는데 속도를 빠르게 할 수 있는 방법 없을까요? [1]
안중경
2008-06-05
4990
27587not in / in 사용시 . [1]
주태형
2008-06-04
3335
27586오라클 START WITH ...CONNECT BY를 MySQL로....
김C
2008-06-03
4567
27585백업기 관리 [1]
김영미
2008-06-03
3606
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다