Оптимизировать запрос структуры объекта
Я пытаюсь сделать клон StackOverflow в свое время, чтобы изучить EF6 и MVC5, в настоящее время я использую OWin для аутентификации.
Все работает нормально, когда у меня есть 50-60 вопросов, я использовалГенератор данных Red Gate и попробуйте увеличить до 1 миллиона вопросов с парой тысяч строк дочерних таблиц без взаимосвязи, просто чтобы немного «подчеркнуть» ORM. Вот как выглядит linq
var query = ctx.Questions
.AsNoTracking() //read-only performance boost.. http://visualstudiomagazine.com/articles/2010/06/24/five-tips-linq-to-sql.aspx
.Include("Attachments")
.Include("Location")
.Include("CreatedBy") //IdentityUser
.Include("Tags")
.Include("Upvotes")
.Include("Upvotes.CreatedBy")
.Include("Downvotes")
.Include("Downvotes.CreatedBy")
.AsQueryable();
if (string.IsNullOrEmpty(sort)) //default
{
query = query.OrderByDescending(x => x.CreatedDate);
}
else
{
sort = sort.ToLower();
if (sort == "latest")
{
query = query.OrderByDescending(x => x.CreatedDate);
}
else if (sort == "popular")
{
//most viewed
query = query.OrderByDescending(x => x.ViewCount);
}
}
var complaints = query.Skip(skipCount)
.Take(pageSize)
.ToList(); //makes an evaluation..
Излишне говорить, что я получаю таймауты SQL и после установкиMiniprofilerи посмотрите на созданный оператор sql, он состоит из нескольких сотен строк.
Я знаю, что я объединяю / включаю слишком много таблиц, но сколько проектов в реальной жизни, нам нужно только объединить 1 или 2 таблицы? Могут быть ситуации, когда нам нужно сделать это много соединений с многомиллионными строками, разве хранимые процедуры - единственный путь?
Если это так, будет ли EF подходить только для небольших проектов?