Too many query rows: 50001 Read only is your friend

Drowning-in-too-much-data

I ran into a legacy custom visualforce page at a client that was getting the error “Too many query rows: 50001”. After some quick googling I found that in the Winter 12 release, Salesforce added two features that can help you.

@ReadOnly Annotation

Visualforce controller methods with the @ReadOnly annotation automatically take advantage of read-only mode. However, restrictions on the @ReadOnly annotation means that, for Visualforce controller methods, a read-only method must also have the @RemoteAction annotation. The @RemoteAction annotation requires that the method be:

  • Either global or public
  • static

(source)

Visualforce ReadOnly Attribute

<apex:page controller="SummaryStatsController" readOnly="true">
<p>Here is a statistic: {!veryLargeSummaryStat}</p>
</apex:page>

(source)

This allows either a single WebService, RemoteAction, or Schedulable.execute() method or the entire visualforce page to execute read only SOQL queries. By doing this you raise the limit from 50,000 records to 1 million.

The great thing about this is it should increase the speed and performance of the queries and you can build custom reports with more data. In fact, I would suggest that if you have a page that deals with a decent amount of records and does not need to insert, update or delete data, that you consider using this feature.

Jeremy Whittington
Jeremy Whittington is the founder and CTO of Thinkaholics, a cloud computing news and consulting firm. Over his 20 year career, Jeremy has served as an adviser, architect, and developer.
 

Leave a Reply