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 26445 게시물 읽기
No. 26445
mysql에서 outer join를 이용할때 속도개선에 대해 의견...
작성자
고영호(elechos)
작성일
2007-03-01 09:55ⓒ
2007-03-01 10:11ⓜ
조회수
4,342

안녕하세요?


mysql에서 outer join를 이용할때 속도개선에 대해 의견을 구합니다.


CUST 테이블에는 고객정보가 있고, SELL 테이블에는 판매한 내역이 있습니다.

여기서 판매내역이 있는 고객정보와 판매내역이 없는 고객정보를 한꺼번에 불러오고자 하는데요, 관련 쿼리는 아래와 같습니다.


select A.*, B.* from CUST as A left outer join (select * from SELL where BalMonth='00') as B

on A.enterno=B.enterno


(참고로 SELL테이블의 BalMonth필드속성은 Not Null로서 반드시 값을 포함하고 있고, 고객별로 BalMonth='00'를 포함하는 레코드가 반드시 하나 존재합니다.)


문제는 위의 쿼리문을 ACCESS(ADO이용)에서는 성능이 괞찮은데요, Mysql에서는 너~무 느리게 불러드립니다. (버전: mysql4.1.7, zeos(6.1.5), delphi5).  판매내역(SELL테이블)에는 20만건 정도 있는데요.  enterno(고객번호) 와 Balmonth에 인덱스를 주었습니다.


개선할 방법이 없을까요?


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

select A.* from CUST A 

모든 회원을 불러온다. 


select A.*, B.* from CUST A Left Outer Join Sell B On A.enterno=B.enterno

모든 회원을 불러오면서 오른쪽에 판매 정보를 붙인다. 레코드 수는 A개수 X B에서 A와 일치하는 개수


B컬럼이 널값이 아니면 판매정보가 있는, 널값이면 판매내역이 없는 정보


다른 조건을 더 붙일 수도 있음.

Where B.BalMonth='00' 또는 On A.enterno=B.enterno AND B.BalMonth='00'

정왕균(아레아)님이 2007-03-01 10:05에 작성한 댓글입니다.
이 댓글은 2007-03-01 10:08에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
26448퀘리문좀 봐주세요 이상합니다.
이나영
2007-03-01
1594
26447asp에서 MySQL5.0의 데이터를 부를때
정애란
2007-03-01
1898
26446insert into.. select.. 쿼리 질문
초보
2007-03-01
2418
26445mysql에서 outer join를 이용할때 속도개선에 대해 의견... [1]
고영호
2007-03-01
4342
26444mysql 세션 환경변수 질문
남생
2007-03-01
2421
26443안녕하세요. 혹 Mysql Oci처럼 래핑해 놓은 클래스있는가요.
대한민국
2007-02-28
1653
26442MySql 5.x 에서 프로시져및 평선 사용시 한글의 문제점 [2]
윤조희
2007-02-28
4567
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다