첫 번째 경우에는 두 가지 문제가 있습니다.
1. 데이터베이스에 대한 왕복 이동이 두 번 발생하므로 바람직하지는 않습니다. 이는 Network traffic
으로 증가합니다.
2. 두 결과 모두 datatable
으로 채우고 있다고 가정하십시오. 두 번째 쿼리가 실패하면 datatable
에 논리를 적용하여 어떤 레코드가 어떤 테이블에서 가져온 레코드인지 식별해야합니다. 이를 위해서는 Transaction
에서 모든 것을 결합해야합니다.
SELECT * FROM Orders Where orderid = 3;
SELECT * FROM Order_Details Where orderid = 3;
더 나은 방법은 왕복 1 회만 있기 때문에 두 번째 방법을 사용하는 것이 좋습니다. LEFT JOIN
을 사용할 때 많은 문제는 없습니다. 테이블에 적절한 Indexes
이 있는지 확인하십시오.
SELECT * FROM Orders
LEFT JOIN Order_Details ON Order_Details.orderid = Orders.orderid
WHERE Orders.orderid = 3;
편집 :
두 기차에서 어떤 상자를 선택해야 사람을 생각해 보자. 그는 3
이라는 번호의 상자를 Train1
에서 골라야하고 Train2
에서 3a
, 3b
등의 일부 상자를 오름차순/내림차순으로 정렬해야합니다.
그는 교통량이 많은 도시를 건너서 기차역에 도착해야합니다. 그가 3
이라는 번호의 박스를 골라서 Train1
에서 집으로 간 다음 상자를 버리고 Train2
, 3a
, 3b
등의 상자를 골라 집으로 돌아가서 3a
, 3b
상자?
트래픽이 많아서 너무 많은 시간을 할애해야합니다. 그의 집이 기차역에 가깝고 피크 시간이 아닌 여행을한다면 큰 문제는 아닐 것이다.
So coming to your tables - Why we need such round trips?
It would be good if you do it in one query.
이제 50 개 이상의 상자가 기차역에서 선택한다고 간주합니다. 이 경우 상자를 차량에 장전하는 데 시간이 더 걸립니다.
So coming to your tables - The more number of columns
you select in the select query, the more time it will take.
For that also single query is advisable.
감사합니다. 각 Order_Detail 행에 모든 Order 데이터가 포함된다는 사실은 어떻습니까? 각 Order_Detail 행에 대해 50 개의 추가 데이터 열인 Order 데이터의 50 개의 열을 가져와야하는 경우 그것은 하나의 추가 데이터베이스 쿼리보다 바람직합니다. – user1680985