Huge performance issue with ActiveRecord::Base exists?


#1

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” ?


#2

COMPLETELY IGNORE this “issue”, this was caused by an old overwrite of
the exists? function that I had from years ago.

MY BAD!


#3

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


#4

Fred, this was my mistake read, the post above yours.