CASTE ACTIVERECORD -LINQ 최적화 쿼리
-
05-07-2019 - |
문제
나는 사용한다 캐슬 activerecord 내 영구 층으로.
데이터베이스에서 처음 20 명의 사용자를 반환 해야하는이 기능을 얻었습니다.
IList<User> users = new List<User>();
var userQuery = from u in User.FindAll()
orderby u.CreationDate
select u;
return userQuery.Take(20).ToList();
내 데이터베이스에는 현재 100 명의 사용자가 있으며 쿼리가 100 명이 아닌 20 명의 사용자를 반환하기를 원합니다.
log4net에서 무슨 일이 일어나고 있는지 모니터링 할 때 쿼리는 먼저 100 명의 사용자를 얻고 후에 20을 먼저 가져갑니다.
더 좋은 방법이 있는지 알고 싶습니다. 사용자가 많을수록 더 많은 쿼리가 느리고 최적화되지 않을 것입니다 ...
해결책
이것이 일어나는 일입니다 ..
- method user.findall ()은 모든 사용자의 배열을 반환합니다. (DB에서 100 줄)
- 그런 다음 같은 배열을 주문하고 필터링합니다.
와 함께 AR 2.0 activeRecordbase 대신 activereCordlinQBase를 사용하고 .findall ()을 대신 .queryable을 사용할 수 있습니다.
이 쿼리는 데이터베이스에서 20 개의 레코드 만 반환합니다.
var userQuery = (from u in User.Queryable
orderby u.CreationDate
select u).Take(20).ToList();
다른 팁
"setMaxResults"메소드가있는 사용자 정의 HQL 쿼리를 만듭니다. 참조 ActiveRecord 사용자 안내서 예를 들어.
제휴하지 않습니다 StackOverflow