特定の sObject テーブルのレコード数を表示したい Visualforce ページがあります。
Visualforce ページには、次のようなかなり単純なものがあります。
<p>Client Account Count: {!ClientAccountCount}</p>
次に、コントローラーで:
// Return the number of clients
public integer getClientAccountCount() {
return [Select count() from Account where SomeCustomField__c = 'Client' limit 50000];
}
SOQL の limit 句を使用すると、毎回最大 50,000 しか返されないので問題ないと思いました。ただし、実際には、本番組織ではまだこの例外が発生します。
09:29:12:179 SOQL_EXECUTE_BEGIN [108]|Aggregations:0|Select count() from Account where SomeCustomField__c = 'Client' limit 50000
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 ディスカッション ボードにも同様の投稿があります - COUNT(*) 関数のクエリ行が多すぎます。VF ページを読み取り専用に設定して、クエリ行の制限を増やすことができません。