Итак, у меня есть запрос linq, где s1.code
происходит от объекта до этого запроса linq.Linq Query Оптимизация объединения таблиц
var q1 = from cf in db.Control_Franchises
join t1 in db.Territories
on SqlFunctions.StringConvert((double)cf.FranchiseID).Trim()
equals t1.FranchiseID.Trim()
join cu in db.Control_Users on t1.FK_CompanyID equals cu.PrimaryCompanyID
join u in db.Users on cu.UserID.ToLower() equals u.Username.ToLower()
where cf.Status == "ACTIVE"
&& cf.FranchiseID > 1000
&& cu.UserType == "Franchisee"
&& cu.Status == "ACTIVE"
&& t1.Province == s1.Code
orderby cu.LastName ascending, cf.FranchiseID ascending
select new
{
FranchiseId = cf.FranchiseID,
Province = cf.StateCode,
DisplayName = cu.LastName + ", " + cu.FirstName,
UserId = u.PK_UserID
};
У меня есть один и тот же блок кода, но на этот раз в моем где положение, я изменил фильтр с помощью t1.Province == s1.Code
к cf.StateCode == s1.Code
var q1 = from cf in db.Control_Franchises
join t1 in db.Territories
on SqlFunctions.StringConvert((double)cf.FranchiseID).Trim()
equals t1.FranchiseID.Trim()
join cu in db.Control_Users on t1.FK_CompanyID equals cu.PrimaryCompanyID
join u in db.Users on cu.UserID.ToLower() equals u.Username.ToLower()
where cf.Status == "ACTIVE"
&& cf.FranchiseID > 1000
&& cu.UserType == "Franchisee"
&& cu.Status == "ACTIVE"
&& cf.StateCode == s1.Code // DIFFERENT FROM ABOVE
orderby cu.LastName ascending, cf.FranchiseID ascending
select new
{
FranchiseId = cf.FranchiseID,
Province = cf.StateCode,
DisplayName = cu.LastName + ", " + cu.FirstName,
UserId = u.PK_UserID
};
Теперь первый запрос выполняется в 10 раз быстрее, чем второй один.
Как я измеряю скорость, это время загрузки моей страницы редактирования, которая, в свою очередь, загружает представление узлов узла mvc. Этот запрос также является частью другого запроса.
Теперь я пытаюсь понять, почему мой первый запрос загружается намного быстрее, и единственная аргументация, о которой я могу думать, состоит в том, что я выполняю условие для таблицы, которая будет объединена, а затем присоединяется ко всем «территориям», таблица с «Control_Franchises» Я только присоединяюсь к части таблицы «Территории».
Любые мысли?
Я не вижу никакой разницы между этими двумя запросами ... Есть один, что Мне не хватает? Они даже называются 'q1'. –
Какие типы 'StateCode' и' Province'? Обе строки? Я предполагаю, что это проверка адресов U.S. против не-U.S или что-то еще ... если это так, возможно ли, что первый запрос работает быстрее только потому, что у вас меньше записей без U.S? –
@ DanielHilgarth в 'where', последний' && 'd термин отличается. О внесении изменений, чтобы это не требовало hcrolling, чтобы увидеть ... @foop при отправке блоков кода, если можно, приятно перерисовать текст по мере необходимости, чтобы в результирующем кодовом блоке не была горизонтальная полоса прокрутки. – AakashM