쿼리문 질문드립니다.

쿼리문 질문드립니다.

QA

쿼리문 질문드립니다.

본문


//진행중인 회원출력
    $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]."),";
    }    
    $comName .= "· {$c_name[wr_3]} <span class='f11 f_90'> {$stu_name}</span><br>";

 

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

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

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

힌트좀 주세요~~

이 질문에 댓글 쓰기 :

답변 4

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

distinct 때문입니다

 

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

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

where 절이 명확해야 빠릅니다

 

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

 

 

그게 아니라면 

 

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

 

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

 

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

그리고.

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

 

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

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

 

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

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

 

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

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,719 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT