쿼리조언 0 2 527

by 지피지기 [MySQL] [2018.07.23 08:32:20]


안녕하세요.
저번주에 쿼리속도 관련 질문을 남겼는데요. 쿼리문의 일부변경으로 속도는 약~간 개선이 되었는데요. 궁금증이 하나 생겨 문의를 드릴까합니다.

조건
1. 골프장 회원권 입력 (엑셀일괄얼로드, 전일시세/금일시세 개별 수정가능)
2. 디비에는 어떤날짜(7월20일)의 디비가 있으며 또한 어떤날짜(7월1일)는 없을수있다.
3. 날짜검색을 통해 디비에는 데이터가 없더라도 관리자가 개별적으로 수정등록할수있도록 노출이 되어야한다.

위 3가지 조건이 있습니다.
아래 이미지는 오늘날짜 기준으로 골프장 및 해당골프장에 대한 회원권이 노출된 화면입니다.
보시는 바와같이 전일시세 / 금일시세가 0원으로서 디비에는 7월23일 데이터가 없습니다.
특정날짜를 선택하게되면 당연히 디비에 있는 데이터를 불러옵니다.



두서없이 얘기를 했네요 ㅡㅡ

쿼리문은 아래와 같습니다.

디비에 시세관련 데이터가 있던 없던 등록된 회원권명을 가져옵니다.
문제는 데이터가 있을시 전일시세 및 금일시세를 가져와야 하는데
아래와같은 쿼리문으로는 가져올수 없을것같아서 while문안에 전일시세 및 금일시세 데이터를 불러오는 쿼리를 다시 집어넣었습니다.
그러다보니 속도가 느려지는 현상이 발생했습니다.
현재는 7천건정도의 데이터가 들어가있는데 앞으로 계속 데이터가 늘어나게 되면 속도는 점점 저하될것인데....
잘못된 부분이 있으면 고수님들의 조언좀바랍니다.
인덱스는 잡혀있습니다.

-- 운영중인 로직이라 삭제합니다. 양해바랍니다.

 

by 마농 [2018.07.23 09:12:16]

1. mySQL 에서만 허용되는 표준을 따르지 않는 그룹바이 구문을 사용하셨네요.
  - 그룹바이 기준항목이 아닌 항목은 select 절에서 집계함수 없이 단독 사용 불가합니다.
  - 표준 방식으로 작성하시기를 권장합니다.
2. wm 과 ws 를 조인하셧지만
  - ws 없이 wm 만 읽어도 되는 부분입니다.
  - 그렇게 하면 그룹바이도 필요 없구요.
3. 루프안에서 서브쿼리
  - wm 만 읽어서 루프돌린다면? 적절한 인덱스가 존재한다면 크게 문제되지는 않을 듯 하네요.
  - 서브쿼리를 조인 방식으로 바꾸면 더 좋을 듯 합니다.
 

SELECT wm.region
     , wm.leisureCode
     , wm.membership_name
     , ws1.today_price
     , ws2.today_price AS yesterday_price
  FROM wiz_membership wm
  LEFT OUTER JOIN wiz_sise ws1
    ON ws1.region          = wm.region         
   AND ws1.leisureCode     = wm.leisureCode    
   AND ws1.membership_name = wm.membership_name
   AND ws1.today_date = '$s_seldate'
  LEFT OUTER JOIN wiz_sise ws2
    ON ws2.region          = wm.region         
   AND ws2.leisureCode     = wm.leisureCode    
   AND ws2.membership_name = wm.membership_name
   AND ws2.today_date = DATE_FORMAT(DATE_ADD('$s_seldate', INTERVAL -1 DAY), '%Y%m%d')
;

 


by 지피지기 [2018.07.23 10:31:53]

아...답변감사합니다.^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입