2012-01-27 2 views
1

Может ли кто-нибудь дать мне какие-либо указания о том, как сделать этот запуск немного быстрее?Slow Lambda Expression

return mb_entities.prospects. 
     FirstOrDefault(x => x.address == person.Add && 
       x.homePhone == person.HPhone && 
       x.bizPhone == person.BPhone && 
       x.cellPhone == person.CPhone && 
       x.city == person.City && 
       x.state == person.State && 
       x.zip == person.Zip && 
       x.email == person.Email && 
       x.firstName == person.FName && 
       x.lastName == person.LName && 
       x.middleName == person.MName && 
       x.genCode == person.GC) ?? new prospect(); 

Прямо сейчас он проходит между 160 и 180 миллисекундами. Это было бы нормально, если бы я не делал этого 1000 раз.

Любые советы были бы весьма признательны. Благодаря!

+1

160 мс действительно длинный. Кажется, что вы обрабатываете, чтобы фильтровать результаты на стороне клиента. Я бы сделал db-запрос, который возвращает только строки, соответствующие вашим критериям. –

+1

Еще один незначительный совет: переустановите критерии, чтобы он был в порядке наиболее избирательного к наименее избирательному. Таким образом, короткое замыкание оператора '&& будет происходить быстрее. –

+0

Просто из любопытства, почему вы это делаете, так как это похоже на то, чтобы найти его каким-то ключом? –

ответ

7

Создайте индекс в наиболее избирательных столбцах (например, по электронной почте, почтовому индексу и фамилию). Это ускорит его. Он должен быть одним индексом для нескольких столбцов.

У вас должно быть много записей в вашей таблице, для выполнения которых требуется 160 мс. Это необычно долго, даже если индекс отсутствует.

+0

Это довольно большой стол, да. Несколько сотен тысяч записей ... Спасибо за подсказку, я собираюсь попробовать это сейчас! – CrowderSoup

+0

Я полагаю, что в большинстве случаев, если это не приведет к опустошению производительности, любой столбец, который будет отображаться в предложении where и * может * быть проиндексирован, * должен * индексироваться. Рост производительности при выборе, который составляет подавляющее большинство операций с базой данных, поражает. –

+2

Я рекомендовал индексировать только подмножество по соображениям пространства. Это не будет иметь большого значения, если его индекс возвращает ровно одну строку или возвращает 5 лишних строк. Я бы не рекомендовал ему дублировать всю таблицу в индексе NC, потому что он большой. – usr