2009-05-03 2 views
0

저는 SubSonic과 Linq Stuff가 처음입니다. 단일 레코드를 검색하는 데 가장 짧고 최적의 방법을 찾으려고합니다.SubSonic을 사용하여 단일 레코드를 얻는 가장 빠른 방법

다른 방법으로 단일 레코드를 얻는 것보다 더 빠르고 더 적은 코드로 작성할 수 있습니까?

User user2 = DB.Select().From(User.Schema) 
.Where(User.PasswordColumn).IsEqualTo(password) 
.And(User.SINumberColumn).IsEqualTo(siNumber) 
.ExecuteSingle<User>(); 

나는 확인 AntsProfiler 도구로 사용했으며,이 29.12ms CPU 시간의 평균 소요 - 테스트를이 그냥 더 오래 지난

UserController uc = new UserController(); 
Query query = new Query("User"); 
query.WHERE(User.Columns.Password, password); 
query.WHERE(User.Columns.SINumber, siNumber); 
User user = uc.FetchByQuery(query).First<User>(); 

소요로 10여 실행

라인은 256.08ms CPU 시간과 UserController를 합치면 66.86ms가 소요됩니다.

제안 사항?

답변

1

IIRC는 쿼리 객체를 유창하게 구사한다 .. 즉

query.WHERE(User.Columns.Password, password); 
query.WHERE(User.Columns.SINumber, siNumber); 

이 같이 읽어야합니다 :

는 테스트에서 증가 된 시간이 때문에 설명 할 수
query = query.WHERE(User.Columns.Password, password); 
query = query.WHERE(User.Columns.SINumber, siNumber); 

(당신이 요구하는지 모든 사용자 항목에 대해 그리고 첫 번째 잡아).

3

"병목 현상"은 생성 된 쿼리로 SubSonic이 생성하거나 결과를 반환하지 않습니다. 특정 쿼리가 느린 경우 데이터베이스 공급자의 인덱싱 함수를 사용하여 쿼리를 최적화해야합니다.

두 번째 경우에는 추가 실행 시간이 컬렉션의 첫 번째 항목을 반환하는 LINQ의 오버 헤드라고 가정합니다.

내 대답은 첫 번째 방법은 최선의 방법이며, 29ms를 사용할 수없는 경우 (DB 호출의 경우 불합리하다고 생각하지 않음), 몇 가지 인덱스를 귀하의 DB를 검색 속도를 높일 수 있습니다.

0

나는 존이 돈에 맞다고 생각한다. SubSonic을 테스트하여 얼마나 많은 시간이 소요되는지 알고 싶다면 SQL 구문을 생성하기 위해 아음속이 소요되는 시간과 SQL 구문을 생성하는 데 소요되는 시간, 그리고 DB가 결과를 반환하는 데 걸리는 시간을 테스트해야합니다. 동시에 (테스트를 격리해야합니다).

아마 당신은 정규의 오래된 SQLCommand를 사용하여 결과를 얻고 연결과 매개 변수를 전달하는 데 걸리는 시간을 테스트하고 비교할 수 있도록 소요 시간을 확인해야합니다.

관련 문제