저는 C#으로 작성된 사내 ORM을 유지 관리하고 있으며 현재 eager-loading 메커니즘이 없습니다. 성능을 향상시키기 위해 열심히로드해야하기 때문에 지원을 위해 자체 코드를 작성해야합니다. (제 동료와 저는 ORM 도구에 대한 경험이 없으며, 기존의 이유로 인해 LinqtoSQL, Entity Framework 또는 Nhibernate와 같은 인기있는 도구를 사용할 수 없습니다.)내 eager-load 알고리즘 작성에 대한 조언이 필요합니다.
제 질문은, 열심히로드하는 SQL 문을 생성하는 가장 좋은 방법은 무엇입니까? 나는 그것에 대해 생각 두 가지 방법으로 올라와있다 - 4 개 테이블의 고전적인 예를 가정
- CustomerCategory 많은 고객 이있는 고객이 많은 주문 주문이 많은 OrderDetail
하고 나는 가정을 가지고 예를 들어 '2008-05-05'와 '2008-12-31'사이의 Order.OrderDate
방법 1 - 하나의 SQL을 생성하여 모든 4 개의 테이블의 데이터 (모두 내부 조인을 사용하여 각 테이블의 기본 키의 고유 한 조합에 대해 하나의 행을 얻습니다.) 이 SQL에 Where 조건을 적용 할 것입니다.
방법 2 - 주문 데이터를 먼저 가져오고 Order.OrderDate가 Order 테이블에서 나왔으므로이 SQL에 Where 조건을 적용합니다. 그런 다음이 쿼리의 결과를 기반으로 필요한 모든 Order ID 값을 알 수 있으므로이 값을 사용하여 주문 세부 정보 데이터를 검색합니다. 또한 필요한 모든 고유 고객 ID 값을 알고 있으므로 고객 테이블에서 데이터를 검색하는데도이 값을 사용하고 마지막으로 CustomerCategory에 대해 동일한 작업을 수행합니다. 이 방법을 사용하려면 4 개의 SQL 문이 필요합니다.
첫 번째 방법이 더 효율적이라는 것을 알 수 있지만 동료 중 한 명은 두 번째 방법이 4 개의 SQL 문을 사용하지만 쓰기 및 유지 관리가 더 쉽다고 지적했습니다.
이 문제에 대한 의견을 보내 주시면 감사하겠습니다. 감사합니다.
도움 주셔서 감사합니다. 본인의 모델에 실제로 문제가 있음을 인정합니다. 우리는 그것을 들여다 보며 당신의 제안에 따라 nhibernate 을 볼 것입니다. – janem