2012-04-02 2 views
3

Visualforce 페이지에서 특정 sObject 테이블의 레코드 수를 표시하고 싶습니다.LimitException : 너무 많은 쿼리 행 : count1() 집계 함수가있는 50001

// Return the number of clients 
public integer getClientAccountCount() { 
    return [Select count() from Account where SomeCustomField__c = 'Client' limit 50000]; 
} 

가 내가 될하려는 SOQL의 제한 절을 생각 : 컨트롤러에서 다음

<p>Client Account Count: {!ClientAccountCount}</p> 

: 내가 좋아하는 아주 간단한 무언가를 가지고하려는없이 VisualForce 페이지에서

모든 것이 최대 50,000 개를 반환하기 때문에 괜찮습니다. 집계 | 179 SOQL_EXECUTE_BEGIN [108] : 0 | SELECT COUNT() 여기서 SomeCustomField__c = '클라이언트'제한 50000 계정에서

09 : 29 : 12 그러나 실제로 나는 아직도 생산 조직에서이 예외가

09 : 29 : 12 : 331 EXCEPTION_THROWN [108] | System.LimitException : 너무 많은 쿼리 행 : 50001

예외가 발생하지 않을이 쿼리를 실행하는 안전한 방법이 있음 나는 못 잡는다?

이상하게도, 익명의 정점으로 다음을 시도해 보면 제대로 작동하고 50,000을 반환합니다.

integer count = [select count() from Account where SomeCustomField__c = 'Client' limit 50000]; 

아마도 문제는 문제를 일으키는 모든 작업에서 쿼리 행의 누적 수는 내가 쿼리를 실행하기 전에 코드의 한계를 확인해야?


Force.com 토론 게시판 - Too many query rows on COUNT(*) function에 비슷한 게시물이 있습니다. 쿼리 행 제한을 늘리기 위해 읽기 전용으로 VF 페이지를 설정할 수 없습니다.

답변

6

Doh! 요청에 대한 SOQL 쿼리에 의해 검색된 누적 레코드 수를 확인해야한다고 확신합니다. 하나의 SOQL 쿼리가 최대 50,000 개의 레코드를 얻을 수있는 반면, 두 개의 SOQL 쿼리는 각각 50,000 개를 처리 할 수 ​​없습니다.

맞춰야합니다. 필요한 경우 Limits.getQueryRows() and Limits.getLimitQueryRows()을 사용하여 SOQL 쿼리를 비활성화 할 수 있습니다.


getClientAccountCount() 메소드의 작동 방식이 변경되었습니다. 집계 함수가 제한되어 있기 때문에 행 수가 몇 개인 지 알 수있게 될 것입니다.

// Return the number of ad book clients 
public string getClientAccountCount() { 
    System.debug(LoggingLevel.Debug, 'getClientAccountCount() - Current Query Rows: ' + Limits.getQueryRows() + '/' + Limits.getLimitQueryRows()); 
    integer recordCount = [Select count() from Account where SomeCustomField__c = 'Client' limit 1001]; 
    if(recordCount == 1001) { return '1000+'; } 
    return string.valueOf(recordCount); 
} 

이 아이디어 - Count the SOQL count() query as a single row query 홍보 가치가 보인다.

+0

예. 동의합니다. 그 아이디어를 홍보했습니다. 그렇다면 SOQL 쿼리를 사용하여 SObject 테이블의 레코드 수를 찾는 방법은 무엇입니까? –

+0

@KirillYunussov. 테이블의 모든 레코드를 반복하고 총 레코드 수를 누적하는 배치 작업을 생성 할 수 있습니다. 그다지 효율적이지는 않겠지 만 궁극적으로 총 레코드 수를 얻게됩니다 (프로세스가 실행되는 동안 발생하는 모든 변경 사항을 줄임). –