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.
525128e48ca2b4c7fb6176ea166fccfd?d=identicon&s=25 Eric G. (gotskill10)
on 2008-10-12 01: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" ?
525128e48ca2b4c7fb6176ea166fccfd?d=identicon&s=25 Eric G. (gotskill10)
on 2008-10-12 01:22
COMPLETELY IGNORE this "issue", this was caused by an old overwrite of
the exists? function that I had from years ago.

MY BAD!
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-10-12 01:26
(Received via mailing list)
On Oct 12, 12:19 am, Aryk Grosz <rails-mailing-l...@andreas-s.net>
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
525128e48ca2b4c7fb6176ea166fccfd?d=identicon&s=25 Eric G. (gotskill10)
on 2008-10-12 01:28
Fred, this was my mistake read, the post above yours.
This topic is locked and can not be replied to.