PHP 최적화 튜 토리 얼 의 내장 문제 해결

개발 과정 에서 우 리 는 한 쌍 이 많은 장면 을 자주 만난다.
예 를 들 어 주문 목록 을 조회 하고 주문 상세 상품,수량 데 이 터 를 보 여 줍 니 다.
사고방식 0:전통 적 인 방법
a.주문서 목록 조회
b.주문 내 역 옮 겨 다 니 기

	$orderList = select * from order where xx;
	foreach($orderList as $orderItem) {
		$orderItem->detailList = select * from order_detail where order_id = $orderItem->id;
	}
 분석:SQL 조회 횟수 는 N+1(N 은 주문 개수)로 데이터 베 이 스 를 자주 요청 하여 효율 에 영향 을 줍 니 다.
 최적화:잦 은 요청 데이터베이스 감소
사고방식 1:
a.주문서 목록 을 조회 한 후 in 을 이용 하여 모든 주문서 의 상세 한 상황 을 찾 아 냅 니 다.
b.통과(주문서 id=>주문서 상세 표 orderid)일치 하 는 데 이 터 를 옮 겨 다 니 기

	$orderList = select * from order where xx;
	$orderId = array_pluck($orderList, 'id'); // Laravel        
	$orderDetailList = select * from order_detail where order_id IN $orderId;
	foreach($orderList as $orderItem) {
		$detailListTemp = [];
		foreach($orderDetailList as $orderDetailItem) {
			if ($orderItem->id == $orderDetailItem->order_id) {
				$detailListTemp[] = $orderDetailItem;		
			}
		}
		$orderItem->detailList = $detailListTemp;
	}
 분석:조 회 를 낮 춘 후 2 층 을 옮 겨 다 니 며 복잡 도가 높 고 수량 이 너무 많 으 면 메모리 가 넘 치기 쉽다.
 최적화:복잡 도 감소
사고방식 2:
a.주문서 목록 을 조회 한 후 in 을 이용 하여 모든 주문서 의 상세 한 상황 을 찾 아 냅 니 다.
b.주문 상세 목록 은 주문 ID 를 색인 으로 바 꾸 고 isset 으로 주문 의 상세 한 상황 과 일치 합 니 다.

	$orderList = select * from order where xx;
	$orderId = array_pluck($orderList, 'id'); // Laravel        
	$orderDetailList = select * from order_detail where order_id IN $orderId;

	//            ID   【  1】
	$orderDetailList = arrayGroup($orderDetailList, 'order_id');
	//  :           ID   【  2:      ,   array_column】
	// $orderList = array_column($orderDetailList, null, 'order_id'); 

	foreach($orderList as $orderItem) {
		$orderItem->detailList = $orderDetailList[$orderItem->id] ?? [];
	}

	//   KEY    
	function arrayGroup($list, $key) {
	 $newList = [];
	 foreach ($list as $item) {
	  $newList[$item[$key]][] = $item;
	 }
	 return $newList;
	}
총결산
PHP 최적화 튜 토리 얼 의 내장 문제 해결 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 PHP 해결 내장 문제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기