У меня есть запрос Linq To Sql на моем сайте asp.net.Linq Query - как вы можете улучшить следующий запрос?
Этот запрос также работает Slow и убедитесь, что его можно улучшить.
Может ли кто-нибудь помочь мне переписать этот запрос?
Я предполагаю, что использование «соединения» сделает его быстрее, но не может понять это правильно. :(
Вот запрос: (входные Титулы: INT_GENDER).
var users = from u in db.Users
where (u.gender == INT_GENDER) && (u.age > 25)
let fileId = (from f in db.Files
where f.username == u.username && f.approved
orderby f.primary
select f.id).FirstOrDefault()
let answer = (from a in db.Answers
where (a.username == u.username) &&
(a.q_id == (from q in db.Questions where q.type == 1
select q.id).FirstOrDefault()) &&
a.approved
select a).FirstOrDefault()
select new {
Username = u.u_username,
FileId = fileId !=null ? fileId : GetEmptyFileId(),
Answer = (answer == null ? "" : (answer.approved ? answer.value: "Empty"))
};
Запрос основан на 3 таблицы Таблицы: 1. Пользователи 2. Файлы 3. Ответы
- Столбец пользователя в таблице пользователей является личным.
- Каждый пользователь может иметь много или не все файлы
- У каждого пользователя может быть много или нет ответов.
Спасибо! Dan
INT_GENDER ?? Почему бы не bool, если все, что вы используете, это мужчина или женщина. Также для лучшей производительности используйте хранимую процедуру proc. Это связано с тем, что хранимые процедуры кэшируют план выполнения, что очень полезно для быстрого извлечения. – AboutDev
спасибо. 1. INT_GENDER может быть 0,1,2. 2. Я предпочитаю оставаться с linq, я знаю, что могу также сделать его выполненным, но я хотел сначала написать лучший запрос. – dan
@AboutDev Подготовленные запросы (например, используемые в LINQ to SQL) также имеют кеш-план выполнения. Городская легенда об этом превосходстве хранимых проков стареет. –