제목 | select 를 여러번 하는게 나을까요 php 루프를 돌리는게 나을까요 질문입니다. | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | amen | 작성시각 | 2017/04/26 10:50:51 |
|
|||
현재 로직은
200줄의 데이터를 select 한후 array=array();
foreach ( $200줄데이터 as $a ){ $param=$a-> id (ci 문 생략) select value from table where id= $param ; array[]=value; }
return array;
이런식으로 코드가 짜져있습니다. 한마디로 200줄 데이터를 먼저 뽑고 그 데이터에 해당하는 id 하나하나를 다시 셀렉트 하는것이지요. foreach 안에 select 쿼리가 200번 돕니다. 물론 굉장히 단순한 쿼리고 인덱스가 다 걸려있습니다.
이걸 이대로 쓰는게 좋을지 아니면
$result= select id, value from table where ~~~( 200줄 데이터 조건절 ) ( $result 에는 200줄의 테이블 데이터를 미리 뽑아놓습니다) foreach( $200줄데이터 as $a){ $param= $a->id foreach( $result as $b ){ if( $b->id == $a->id ){ $array[]=$b->value; } } return $array; }
이런식으로 하는게 좋을지 모르겠습니다.
후자의 경우엔 각각 200개씩 데이터 뽑아놓고 루프안에 루프를 돌려서 if문으로 $a->id 와 $b->id 가 같을때 벨류값을 가져와라. 입니다. 이렇게 되면 $result 오프젝트는 200곱하기 200 총 4000번 돌겠네요. 대신 $result 를 구하는 select 쿼리는 한번 돌고요.
질문입니다.
1번 . 전자와 같이 $200줄데이터를 한번 뽑고 그안에 select 쿼리를 200번 돌리는게 좋은지 2번 후자와 같이 $200줄 데이터 한번 뽑고 $result 데이터 한번 뽑아서 루프안에 루프로 총 4000번 루프 돌아서 계산하는게 더 좋은지 궁금합니다.
1번 같은 경우는 db에 부하가 많이 가겠고 2번 같은 경우는 당연히 웹서버에 부하가 많이 가겠지요. ? ;
현재는 1번과 같이 되어있습니다. 동시처리가 많아진다고 했을때 어떤 방법을 더 권장하시나요 ? |
|||
다음글 | PHP 음원 병합시 속성 문제로 인한 오류 관련 문의. (2) | ||
이전글 | mysql에서 특정단어 검색질문 (7) | ||
amen
/
2017/04/26 11:02:21 /
추천
0
|
샤오란
/
2017/04/26 11:06:20 /
추천
0
다행이네요. 타인에게 질문을 하다보면 자신이 먼저 질문하는 과정에서 답을 찾는 경우도 많더라구요~ ㅎㅎ
|
변종원(웅파)
/
2017/04/26 13:00:49 /
추천
0
한방쿼리로도 가능할걸로 보입니다. ^^
|
amen
/
2017/04/26 20:10:42 /
추천
0
댓글 감사합니다. 한방 쿼리는 안되었던게 저 두개의 쿼리 결과 오브젝트의 id가 1:1 대응이 아니라서 원하는 계산이 안되더라고요 ㅠ 부득이하게 나눴습니다. 무튼 질문하는 와중에 해결이 잘 되었고 실제 소스에도 반영하여서 매우 큰 보람을 느끼고 있습니다. ( 운영단에선 달라진게 하나도 없는데 뭘 그렇게 개션했냐고 하네요 ㅋㅋㅋㅋ) |
변종원(웅파)
/
2017/04/27 08:49:48 /
추천
0
amen/ 제가 정확한 구조를 몰라서 그럴 수 있겠지만 1:n 구조여도 group_concat 함수로 묶어서 표현할 수도 있습니다. ^^
|
한대승(불의회상)
/
2017/04/27 08:51:52 /
추천
0
@amen UI가 대폭적으로 바뀌지 않는한 개선 여부를 느끼기 힘들죠.. ^^
|
kaido
/
2017/04/27 09:09:46 /
추천
0
@amen 백엔드와 프론트엔드의 차이죠 ㅋㅋ 백엔드는 아무리 개선 해도 눈에 안뜁니다. 해봐야 벤치마킹을 수치로 표시하는 정도 밖에 없거나, 에러를 잡아주는 것정도 뿐이 없죠.
그런데 html 수정은 별거 아닌 문구 하나 만 바꿔도 엄청 티가 나죠. ㅋㅋㅋ
|
질문을 하고 3번 가장 모범 답안이 생각났네요.
$result 데이터 한번 뽑아서 해당 id, value 를 배열에 키 벨류 로 넣어두고 그 배열을 이용해서 키값으로 찾으면
굳이 200번씩 매번 루프안에 루프질을 안해도 되겠네요..-_-;;