Linq2NHibernate를 사용하여 여러 쿼리에서 테이블의 데이터 묶음을 가져옵니다. 테이블에 열이 10 개 포함되어 있지만 중 3 개만 내 쿼리에이고 다른 속성은 필요하지 않습니다. 그럼에도 불구하고 생성 된 SQL은 (예상대로) 각 쿼리에 대해의 모든 속성 을로드합니다.Linq2NHibernate를 최적화 할 때 권장되는 방법
쿼리를 최적화하는 가장 좋은 방법은 무엇입니까?
최적화 된 쿼리에 좀 더 간단한 엔티티 변형을 사용하는 것이 합리적입니까? 나는. 2 개의 프로퍼티만을 포함하는 엔티티를 생성하고 그것을 동일한 테이블에 매핑하려면? 실제 엔티티가 가벼운 엔티티로부터 상속받은 경우 너무 복잡하지 않아야하며 NHibernate는 더 작은 데이터 서브셋 만 가져옵니다.
일반적인 방법입니까, 아니면 더 나은 방법으로 쿼리를 최적화 할 수 있습니까? LINQ는 지금 당장이 프로젝트에서 사용되기 때문에 LINQ를 고수하고 싶습니다.
[편집]
마이크 아래 대답으로,이 솔루션은 매우 분명하다 : 실제 예상 DTO들 인출하는 데 필요한 속성을 지시합니다. 이것 만 투영 된 속성을 가져 오는 쿼리를 생성하는 동안
/* fetch actual entities */
var results = session
.Query<Food>()
.Where(p => p.Proteins < 100 && p.Fats < 50);
/* ... results in: */
SELECT Id, Proteins, Fats, Carbs, Name, Whatever
FROM [Food] WHERE Proteins < 100 AND Fats < 50
:
즉,이 쿼리는 모든 속성을로드 : 그래서 예를 제공 할 것입니다, 그냥 명확하게하는
을/* fetch light DTOs */
var results = session
.Query<Food>()
.Where(p => p.Proteins < 100 && p.Fats < 50)
.Select(p => new
{
Proteins = p.Proteins,
Fats = p.Fats
});
/* generated sql: */
SELECT Proteins, Fats
FROM [Food] WHERE Proteins < 100 AND Fats < 50
QueryOver로 전환하는 것을 고려 했습니까? NH2Linq는 최신 NH 릴리스에서는 권장되지 않습니다. –
@ Matías : IMHO SQL이 생성되는 방식이 바뀌지 않을 것이라고 생각합니다. 엔티티를 가져 오기 위해 모든 속성을 가져와야합니다. 하지만 지금은 많은 코드를 변경하는 데 시간을 낭비하고 싶지 않습니다. LINQ는 지금까지 잘 작동했습니다 (위에서 언급 한 성능 문제 제외). – Groo
하지만 문제는 NHtoLinq가 더 이상 지원되지 않는다는 것입니다. 그냥 제안입니다 :) –