테스트 사이트 - 개발 중인 베타 버전입니다

쿼리문 질문드립니다. 채택완료

소수리꼬 6년 전 조회 4,086

</p>

<p>//진행중인 회원출력</p>

<p>    $res2=sql_query("select DISTINCT wr_name from $reserve_table where wr_link1='$row[mb_id]' and wr_code='$tchtxt' and wr_good='0' and  (DATE_FORMAT( CONCAT(rdate,' ',rtime) ,'%Y-%m-%d %H:%i:00') > '$g4[time_ymdhis]' and rdate < '$limitDate')");

    

    $stu_name='';

    while($rowK=sql_fetch_array($res2)){

     $stu_name .= "(".$rowK[wr_name]."),";

    }    </p>

<p>    $comName .= "· {$c_name[wr_3]} <span class='f11 f_90'> {$stu_name}</span>
";</p>

<p>

 

위처럼 distinct 함수를 이용해서 while문으로 담았는데요.

여러번 루프를 도니까 속도가 느려지네요..

while문을 사용하지 않고 더 빠르게 쿼리 할려면 어찌해야 하나요?

힌트좀 주세요~~

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
플래토
6년 전

속도 저하의 원인은 인덱스 없는 wr_name 컬럼에

distinct 때문입니다

 

distinct를 하는 이유가 명확하지 않다면

굳이 저렇게 데이타를 추출하지 마시고

where 절이 명확해야 빠릅니다

 

exists 를 활용하는게 더 좋을것 같네요

 

 

그게 아니라면 

 

@파아랑 님의 의견대로 group by를 활용하는게 낫습니다

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

소수리꼬
6년 전
답변 감사드립니다.
팻시
6년 전
저도 답변 감사드립니다. 자주 배우내요.
플래토
6년 전
@소수리꼬 잘 해결되시길 바래요

@팻시 별말씀을요.. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

wr_name 에 색인을 걸어주세요 아니면 group by 로 묶어서 해보시고

 

그래도 속도이슈가 발생한다면 회원이름만 따로 유니크하게 저장하시고 색인거시면 될것 같습니다.

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소수리꼬
6년 전
답변 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

어떻게든 돌아야 자료를 가져올텐데요. 다른방법이 있나요?

그리고.

저것때문에 느려지는 것이 확실한가요?

 

저는 아무리봐도 딱히 원인을 찾을만한 코드도 없는데요.

아무리봐도 코드도 단순하고.  while 문도 하는일이 거의 없는데요.

 

다른 원인이 있을꺼에요.  뭐 자료가 10억건씩 되면 몰라도 저걸로 느려지진 않아요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소수리꼬
6년 전
답변 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

추출한 레코드 수가 몇백개 이하라면 while문 때문에 속도가 눈에 띄게 느릴 것 같지는 않습니다

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소수리꼬
6년 전
답변 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인