Я использую Linq2NHibernate для выборки данных из таблицы в нескольких запросах.Хотя таблица содержит 10 столбцов, я использую только 3 из них в своем запросе, и впоследствии мне не нужны другие свойства.Тем не менее, сгенерированный SQL загружает (как и ожидалось) все свойства для каждого запроса.
Каков рекомендуемый способ оптимизации запроса?
Имеет ли смысл сделать объект более легкимварианты, которые будут использоваться для оптимизированных запросов?Т.е. создать сущность, содержащую только 2 свойства, и сопоставить ее с той же таблицей?Если фактическая сущность наследуется от более легкой сущности, она не должна создавать слишком много беспорядка, и NHibernate в конечном итоге получит только меньшее подмножество данных.
Это обычная практика или есть лучший способоптимизировать запросы?Я бы предпочел придерживаться 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