Меня интересует, как набор результатов SQL-запроса переносится с сервера на клиент.
Большинство картографов O / R поддерживают как рыхлую, так и ленивую загрузку, у обоих есть свои плюсы и минусы.Например, Entity Framework4 (.NET) имеет прекрасную поддержку загрузки.
Однако, давайте предположим, что у нас есть такая модель:
BlogPost
{
public string Body {get;set;}
ICollection<Comment> Comments {get;set;}
}
...
изапрос, подобный следующему:
var posts = context
.Posts
.Include(post => post.Comments)
.Where(post => post.Id == 1)
.First();
Это приведет к одному запросу SQL, в котором все данные для «сообщения» будут повторяться в каждой строке для каждого «комментария»
Допустим, мыесть 100 комментариев к конкретному сообщению, и Post.Body - это огромная часть текста.это не может быть хорошо?Или данные каким-то образом сжимаются при отправке клиенту, что сводит к минимуму издержки на повторение данных в каждой строке?
Как лучше всего определить, является ли один такой запрос более эффективным, чем два простыхзапросы (один для получения поста и один для получения комментариев)?
Сравнение этого в среде разработчика довольно бессмысленно, здесь есть несколько факторов: загрузка ЦП на сервере SQL Сетевая нагрузка Загрузка ЦПна сервере приложений (материализация объектов)
Идеи на этот счет?
[Изменить] Уточнение:
Два запроса будут выглядеть примерно так:
sql
select * from post where postid = 123
результат
id , topic, body , etc...
sql
select * from comment where postid = 123
результат
id,postid, commenttext , etc...
первый запрос дастодна строка и 2-й запрос дадут столько строк, сколько есть комментариев.
в одном запросе будет столько строк, сколько есть комментариев для конкретного поста, но со всеми данными поста, повторенными для каждого поста.ряд.
result
p.id , p.topic, __p.body__, c.id, c.postid, c.commenttext
p.body будет повторяться в каждой строке, что делает набор результатов чрезвычайно большим.(при условии, что p.body содержит много данных, которые есть; -)