Forum: Ruby on Rails huge performance issue with ActiveRecord::Base exists?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Eric G. (Guest)
on 2008-10-12 03:19
I was just running a relative simple exists? query:

Page.exists?(["id > ?",i])

which equates to

  SELECT COUNT(*) FROM `pages`     WHERE (id > 1400000)  LIMIT 1

You would think with a COUNT and a LIMIT 1, that things would be really
fast, but its SUPER slow, its trying to count all the records greater
than 1400000.

This is N times faster:

  SELECT  * FROM `pages` WHERE (id > 1400000)  LIMIT 1


Do you guys think this needs to be changed, or not worth changing
COUNT(*) to just * even though its a "LIMIT 1" ?
Eric G. (Guest)
on 2008-10-12 03:22
COMPLETELY IGNORE this "issue", this was caused by an old overwrite of
the exists? function that I had from years ago.

MY BAD!
Frederick C. (Guest)
on 2008-10-12 03:26
(Received via mailing list)
On Oct 12, 12:19 am, Aryk G. <removed_email_address@domain.invalid>
wrote:
> than 1400000.
>
> This is N times faster:
>
>   SELECT  * FROM `pages` WHERE (id > 1400000)  LIMIT 1
>
> Do you guys think this needs to be changed, or not worth changing
> COUNT(*) to just * even though its a "LIMIT 1" ?

Which version of rails are you running? I've looked at the source of
edge, 2-1-stable and 2-0-stable and for all those versions exists does
not appear to use count. Are you sure the query is coming from there?

Fred
Eric G. (Guest)
on 2008-10-12 03:28
Fred, this was my mistake read, the post above yours.
This topic is locked and can not be replied to.