Copy
//진행중인 회원출력
$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개 / 댓글 6개
채택된 답변
+20 포인트
2019-08-19 (월) 22:17:35
속도 저하의 원인은 인덱스 없는 wr_name 컬럼에
distinct 때문입니다
distinct를 하는 이유가 명확하지 않다면
굳이 저렇게 데이타를 추출하지 마시고
where 절이 명확해야 빠릅니다
exists 를 활용하는게 더 좋을것 같네요
그게 아니라면
@파아랑 님의 의견대로 group by를 활용하는게 낫습니다
답변에 대한 댓글 3개
2019-08-19 (월) 22:02:36
wr_name 에 색인을 걸어주세요 아니면 group by 로 묶어서 해보시고
그래도 속도이슈가 발생한다면 회원이름만 따로 유니크하게 저장하시고 색인거시면 될것 같습니다.
답변에 대한 댓글 1개
2019-08-19 (월) 18:47:15
어떻게든 돌아야 자료를 가져올텐데요. 다른방법이 있나요?
그리고.
저것때문에 느려지는 것이 확실한가요?
저는 아무리봐도 딱히 원인을 찾을만한 코드도 없는데요.
아무리봐도 코드도 단순하고. while 문도 하는일이 거의 없는데요.
다른 원인이 있을꺼에요. 뭐 자료가 10억건씩 되면 몰라도 저걸로 느려지진 않아요.
답변에 대한 댓글 1개
2019-08-19 (월) 18:39:51
추출한 레코드 수가 몇백개 이하라면 while문 때문에 속도가 눈에 띄게 느릴 것 같지는 않습니다
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.