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 27968 게시물 읽기
No. 27968
당췌.. 5.36 초를 더 단축 시킬 방법이 없네요...ㅠ.ㅠ
작성자
이은성(siliver)
작성일
2009-01-13 20:27ⓒ
2009-01-13 20:31ⓜ
조회수
4,427

현재 MEMBER 란 테이블 (회원정보) 이 있고..


DEPT_MEMBER 란 부서회원정보(아이디만 있는) 테이블이 있습니다.


Member 테이블은.. recommend_id 라는 추천인 아이디를 넣을 수 있는 컬럼이 있는데...


제가 원하는 것은.. Member 의 정보와 함께.. 각 회원당.. 추천인 으로 등록한 회원수 를 구하는 쿼리를 짜는데...


단서조항은 B.mem_id 를 제외한 데이터 추출이 목적입니다. (not exists 사용)


참.. 무식하다는 생각도 들고.. 아는게 없으니.. 어찌 할 바도 모르겠고..


여러 분들의 도움 부탁 드리고저 글을 작성 합니다..


우선 제가 작성한 쿼리는 다음과 같습니다.


SELECT A.* , (

       SELECT  COUNT(USER_ID)

      FROM member

      WHERE recommend_id = A .USER_ID

) as cnt  from member A 

WHERE not exists (

      select 1 from dept_member B

      where A.user_id = B.mem_id

)

 order by cnt desc

 limit 0,10 ; 


참고로 A.user_id 는 primary key 이고

A.recommend_id 는 인덱스를 걸어놓은 상태 입니다.


또한.. B.mem_id 도 prikary key 입니다.


여러 고수님의 고견 부탁 드립니다.


실행시간을 더 줄일 수 있는 방법이 없을까요?

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

group by 를 먼저 해서 10건을 먼저 추출한 후 join을 하는 것이 조금 더 속도가 빨라지지 않을까 싶네요.

SELECT C.*, B.CNT
  FROM (SELECT RCMD_ID, CNT
          FROM (SELECT RCMD_ID, COUNT(RCMD_ID) CNT
                  FROM MEMBER
                 GROUP BY RCMD_ID) A     
         WHERE NOT EXISTS (SELECT 1
                             FROM DEPT_MEMBER B
                            WHERE B.MEM_ID = A.RCMD_ID)
        ORDER BY CNT DESC
        LIMIT 0, 10) B,
       MEMBER C
 WHERE B.RCMD_ID = C.USR_ID

구헌수(madcat)님이 2009-01-14 11:25에 작성한 댓글입니다.

구헌수님의 답글이 .. 참 좋은 도움 되었습니다.

감사합니다.

세상은 넓고 고수는 많으며.. 이렇게 성의 있는 답변으로 하여금.. 

제가 DB에 대해 생각할수 있는 범위를 넓혀 주시는 거 같네요..

감사 드립니다..

5.36초의 압박.... 0.18초로 .. 역시.. 대단 하십니당..^^;

오른 하루도 즐겁게 보내시기 바랍니다.

다시한번 감사 드립니다.

이은성(siliver)님이 2009-01-14 19:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
27971MySQL 리플리케이션 Master-Slave 관련(N:1) [1]
도나영
2009-01-17
4821
27970MySQL 5.1.30 에 innodb 옵션 설치가 되지 않습니다. [2]
셀로모
2009-01-14
4441
27969Oracle 의 start with ~ connect by prior 질문입니다. [1]
남제
2009-01-14
6020
27968당췌.. 5.36 초를 더 단축 시킬 방법이 없네요...ㅠ.ㅠ [2]
이은성
2009-01-13
4427
27967mysql과 mssql의 차이점에 관해서 문의 드립니다. [2]
박성원
2009-01-12
4859
27966공인자격증에 대해서 문의 드립니다.
박성원
2009-01-09
4105
27965Innodb 이노디비 live상태의 핫백업 가능한가요?
stone
2009-01-09
4794
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다