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 29702 게시물 읽기
No. 29702
안녕하세요 초보가 질문드립니다.
작성자
투루로맨스(jung1873)
작성일
2010-06-15 10:49
조회수
7,680

안녕하세요 mysql질문 입니다.

 

밑에 쿼리인데 너무 느려서요..


select
date_format(A.send_date, '%Y-%m-%d')  as sendDate,
Sum(case when  A.RESERVED1='1' then 1 else 0 END)  as pay,
Sum(case when  A.RESERVED1='0' then 1 else 0 END)  as free,
Sum(case when  A.RESERVED1='2' then 1 else 0 END)  as yearpay,
Sum(case when  A.RESERVED1='3' then 1 else 0 END)  as know,
Sum(case when A.RESERVED1 in ('4','6') then 1 else 0 END) as become,
sum(case when A.RESERVED1 in ('0','1','2','3','4','6') then 1 else 0 end) as sumhap,
sum(case when A.RESERVED1='1' then 20 else 12 end) as chargeGubun
from(

) sdk_sms_report as A
inner join (select distinct B.PHONE_NUMBER, B.SEND_DATE, B.User_Id, B.Job_ID, C.User_UserID, C.Expert_ExpertIdx, C.Partner_SiteId
     from sdk_sms_report_detail B
     inner join subscribe C on (B.PHONE_NUMBER = C.User_UserID) and (B.User_Id = C.Expert_ExpertIdx)
     where  B.User_Id is not Null) as D on (D.Job_ID = A.Job_ID)
WHERE  A.RESERVED1 IS NOT NULL
GROUP BY sendDate

 

결과값은

 

 

sendDate pay free yearpay know become sumhap chargeGubun
2010-04-29 11 4 0 0 0 15 268
2010-04-30 0 571 0 0 0 571 6852
2010-05-01 569 0 0 0 0 569 11380
2010-05-03 5 3076 0 5 0 3086 37072
2010-05-04 5167 1146 0 570 0 6883 123932
2010-05-05 566 566 0 574 0 1706 25000
2010-05-06 2107 2687 0 1436 0 6230 91616
2010-05-07 2643 0 0 719 0 3362 61488
2010-05-08 640 129 0 0 0 769 14348
2010-05-09 0 0 0 1123 0 1123 13476
2010-05-10 2698 560 0 1116 0 4374 74072
2010-05-11 2858 3301 0 995 0 7154 108712
2010-05-12 4972 3 0 1122 0 6097 112940
2010-05-13 5714 561 0 1800 0 8075 142612
2010-05-14 5098 565 0 1681 0 7344 128912
2010-05-15 119 0 0 1680 0 1799 22540
2010-05-16 0 559 0 558 0 1117 13404
2010-05-17 2847 2821 0 556 0 6224 97464
2010-05-18 2307 0 0 1122 0 3429 59604
2010-05-19 2319 560 0 680 0 3559 61260
2010-05-20 2331 0 0 1104 0 3435 59868
2010-05-22 540 0 0 0 0 540 10800
2010-05-23 0 0 0 535 0 535 6420
2010-05-24 2428 3667 0 1600 0 7695 111764
2010-05-25 2474 1063 0 530 0 4067 68596
2010-05-26 0 4959 0 0 0 4959 59508
2010-05-27 4976 526 0 2118 0 7620 131248
2010-05-28 6505 2130 0 0 0 8635 155660
2010-05-30 1070 0 0 0 0 1070 21400
2010-05-31 6 3137 0 2 0 3145 37788
2010-06-01 2639 543 0 178 0 3360 61432
2010-06-02 535 0 0 1066 0 1601 23492
2010-06-03 2106 0 0 2633 0 4739 73716
2010-06-04 2591 5 0 946 0 3542 63232
2010-06-05 514 0 0 0 0 514 10280
2010-06-06 0 0 0 506 0 506 6072
2010-06-07 0 4000 0 500 0 4500 54000
2010-06-08 3109 132 0 1008 0 4249 75860
2010-06-09 3522 166 0 1510 0 5198 90552
2010-06-10 3126 591 0 0 0 3717 69612
2010-06-11 2628 596 0 1006 0 4230 71784
2010-06-12 502 1 0 0 0 503 10052
2010-06-13 0 0 0 500 0 500 6000
2010-06-14 2046 593 0 1479 0 4118 65784
2010-06-15 2516 0 0 0 0 2516 50320


 

 

위결과가 결과값입니다.

SMS 발생통계인데..

 

subscribe 테이블에는 8934 데이타 수가 있고

sdk_sms_report 테이블에는 2724 데이타 수가 있고

sdk_sms_report_detail  테이블에는 178188 데이터 수가 있습니다.

 

이걸 좀 빠르게 할수 있나요

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

우선 데이터를 보지 않는 상태에서 튜닝은 어렵네요.

일반적으로 inner join, 서브쿼리, is not null은 질의문의 속도를 느리게 합니다.

질의문을 보면 아래의 내용은 없어도 잘 될것 같습니다.

inner join (select distinct B.PHONE_NUMBER, B.SEND_DATE, B.User_Id, B.Job_ID, C.User_UserID, C.Expert_ExpertIdx, C.Partner_SiteId
     from sdk_sms_report_detail B
     inner join subscribe C on (B.PHONE_NUMBER = C.User_UserID) and (B.User_Id = C.Expert_ExpertIdx)
     where  B.User_Id is not Null) as D on (D.Job_ID = A.Job_ID)

그리고 is not null 조건은 속도를 느리게 합니다.

RESERVED1  필드에 인덱스가 없다면 인덱스를 생성하고

조건은 A.RESERVED1 > '' 이렇게 추가 하면,
문자열 검색을 하여 공백('') 보다 큰 데이터(null이 아닌 데이터)를 인덱스에서 찾기 때문에 속도는 빠르게 할 수 있을 것 같습니다.

send_date 필드에 인덱스를 생성하고
조건에 필요한 날짜를 입력 받아 조회할 데이터를 줄이는 것도 속도를 증가 시킬수 있습니다.

 

참고로 집계성 데이터를 추출 하려고 한것 같아 보이는데
집계성 테이블을 만들어 주기적(주단위, 월단위...)으로 집계데이터수집하여
필요시 집계성 테이블만 조회 하는 것도 좋은 방법이 될것 같습니다.

 

 

 

 

 

사이베이스가 싫어(bluexmas)님이 2010-06-15 22:16에 작성한 댓글입니다.
이 댓글은 2010-06-15 22:18에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
29706이런 건 어떻게 쿼리를 구현해야 할까요? [1]
누가아노
2010-06-22
6919
29704어플 설치본 생성시 DB를 포함하려면? [3]
생이
2010-06-16
7150
29703리플리케이션 질문입니다. [4]
곽승훈
2010-06-16
7047
29702안녕하세요 초보가 질문드립니다. [1]
투루로맨스
2010-06-15
7680
29701Insert문 속도개선 [3]
김현철
2010-06-14
8391
29700테이블 생성에 대한 질문입니다... [2]
윤은숙
2010-06-14
6895
29699mysql 연결유지현상에 관련 질문입니다.
헬프요
2010-06-11
7252
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다