2012-01-27 2 views
1

누구든지 나를 조금 더 빨리 달릴 수있는 방법에 대한 조언을 해줄 수 있습니까?느린 람다 표현

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-query를 만들 것이다. –

+1

또 다른 부수적 인 팁 : 조건을 가장 선택적이거나 덜 선택적인 순서로 다시 정렬하십시오. 그러면 '&&'연산자의 단락이 더 빠르게 발생합니다. –

+0

호기심에서 벗어난 이유는 무엇일까요? –

답변

7

가장 선택적인 열 (예 : 이메일, 우편 번호 및 성)에 색인을 생성하십시오. 이렇게하면 속도가 빨라집니다. 여러 열에 대해 하나의 색인이어야합니다.

테이블에서 한 번 실행하려면 160ms가 걸리는 많은 레코드가 있어야합니다. 색인이없는 경우에도 비정상적으로 길다.

+0

꽤 큰 테이블입니다. 수십만 기록 ... 팁 주셔서 감사합니다, 나는 지금 그것을 시도 갈거야! – CrowderSoup

+0

대부분의 경우 성능을 저하시키지 않는 한 where 절에 나타나고 * 인덱싱 할 수있는 모든 열이 인덱싱되어야한다고 생각합니다. 데이터베이스 작업의 대다수를 구성하는 셀렉트의 성능 향상은 놀랍습니다. –

+2

공간적인 이유로 부분 집합 만 인덱싱하는 것이 좋습니다. 그의 인덱스가 정확히 하나의 행을 반환하거나 5 개의 불필요한 행을 반환하는 경우 많은 차이를 만들지 않습니다. 큰 테이블이기 때문에 전체 테이블을 NC 인덱스로 복제 할 것을 권장하지 않습니다. – usr