2014-10-10 2 views
1

현재 데이터 소스를 Kendo Grid에 연결하면 두 개의 쿼리가 실행됩니다.Kendo Grid에서 두 개의 쿼리를 실행하지 못하도록합니다.

첫 번째 : 올바른 숫자의 페이지를 만들고 사용자에게 몇 개의 레코드가 있는지 알려주려면 Count(*)입니다.

두 번째 : 표시 할 페이지 당 행 수를 기준으로 TOP 쿼리입니다.

내 문제는 .Pageable(p => p.Enabled(false).Info(false))인데도 Count (*) 쿼리를 실행 중임을 나타내는입니다.

실행중인 쿼리가 매우 비싸고 처음 Count (*) 쿼리 실행을 완전히 제거하고 싶습니다.

답변

1

그리드뿐 아니라 데이터 소스에서 서버 페이징을 해제 해보십시오. 자바 스크립트에서는 DataSource.serverPaging 옵션이됩니다. MVC 도우미와 정확히 무엇인지 모릅니다.

그러나 테이블에서 카운트 (*)를 얻는 데 너무 오래 걸리는 경우 많은 행이 있으므로 페이징을 끄면 모든 행을 가져올 것이므로 문제가 악화 될 것이라고 생각합니다. 고객에게 다시 보냅니다.

2

데이터를 페이지로 분리하려면 서버에서 계산할 수있는 방법을 찾아야합니다. 너는 단지 주변을 둘러 볼 수 없다.

CodingWithSpike가 지적했듯이 모든 페이지를 한 페이지에 표시하는 것은 더 많은 시간이 걸릴 것으로 예상되므로 카운트 (*)를 얻으려면이 시점에서 몇 가지 해결책이 필요합니다.

가) 가져올 최대 행 수를 단일 페이지에서 수정합니다. 사용자가이 제한을 알고 있는지 확인하십시오.

B) 테이블의 레코드 수가 안정되면 서버에 해당 개수를 캐시 할 수 있습니다.

C) 서버 측에서 테이블 데이터를 캐시 할 수도 있습니다. 그것은 카운트 및 데이터 가져 오기 속도를 높일 것입니다. 그러나 서버 메모리의 중요도와 캐시에서 가져온 데이터가 최신 상태가 아닐 수도 있습니다 (X 분마다 데이터 새로 고침을 고려할 수 있음).

옵션 B 또는 C를 사용하려면 서버에서 캐시 된 데이터를 가져 오기 위해 자신의 읽기 논리 (dataSource.transport 객체)를 구현해야합니다. 당신은 100 개 이상의 행을 못할거야 것을 알고

편집

내가 그냥 하이브리드 솔루션으로 나왔다. D) 클라이언트 측에서 계산 될 수를 제외하고 A)와 유사합니다.

D) 서버에서 상위 100 개의 행만 검색하기 위해 dataSource.transport의 읽기 논리를 대체합니다. Read 함수에는 그리드에서 처리 할 형식 (예 : OData 객체)으로 데이터를 반환하는 데 사용할 수있는 옵션 매개 변수 객체가 있습니다.

일반적으로 OData 개체에 의해 반환되는 카운트는 서버에서 계산 된 인라인 계수로 필터에 일치하는 레코드 수를 알 수 있습니다. 귀하의 경우에는 성공 함수를 호출하기 전에 항상 서버에 대한 호출없이 클라이언트 측에서 설정할 수 있도록 OData 객체에 반환되는 행 수가 항상 유지됩니다.

여기에 Kendo documentation about the transport.read 그래서 표 여러 대규모 카탈로그 아이템 간의 매핑에 이용된다

+0

(함수 부로 판독 세트를 참조)이다. 아이디어는 지금까지 Top 100 결과 만 보여줄 것입니다. 그러나 여전히 IQueryable을 활용하기를 원합니다. 따라서 사용자가 이름에서 Kendo Filter를 수행하면 여전히 상위 100 개의 결과를 제공합니다. 배후에서 EF 쿼리에 대해'query.Take (100)'을 말하려고했지만 필터를 사용하면 전체 카탈로그가 아닌 100 개의 레코드 만 필터링합니다. – Steve

+1

그래서 100 행을 필터링하면 원래 세트와 완전히 다른 100 행의 다른 세트로 끝날 수 있습니까? –

+0

예. 나는 네가하는 말에 대해 생각하려고 애 쓰고있어 검도원에 들어가서 이걸 조작하는 것이 얼마나 깊은지를 생각하고있다. 가능하지 않을 수도 있습니다.이 순위 쿼리가 비용이 많이 들기 때문에 HALF로 런타임을 줄이려고했습니다. 기본적으로 상위 100 개로 제한하고 싶습니다. 페이징을 사용하지 않도록 설정하는 것이 좋지만 필터 및 정렬을 사용하여 전체 데이터 소스에 영향을 줄 수 있습니다. – Steve

관련 문제