2009-12-21 15 views
8

¿Hay alguna manera de evitar que ActiveRecord emita un SHOW FIELDS a la base de datos cuando no es necesario?Evite SHOW FIELDS en ActiveRecord

Estoy trabajando en la aplicación crítica del rendimiento de la base de datos, y acabo de notar que en una consulta típica mi SELECT toma 0.5 ms y el SHOW FIELDS relacionado toma 2 ms - ¡4 veces más! Aún más importante, porque no es necesario, porque ya estoy especificando la única columna que desea recuperar:

UsersAddress.find(:all, :conditions => {:user_id => 1}, :select => :address_id)

UsersAddress de carga (0,5 ms) address_id SELECT users_addresses DONDE (. users_addressesuser_id = 1)

Columnas UsersAddress (2.1ms) VER CAMPOS DE users_addresses

Por supuesto, esto sólo ocurre una vez cada vez que alguna mesa se toca por primera vez, pero ¿no debería ser completo? Antes que nada, esa información ya está en mi esquema. Segundo, no lo necesito.

¿Alguna idea de cómo optimizar esto para que Rails no ejecute un SHOW FIELDS a menos que realmente lo necesite?

Gracias!

Respuesta

11

En el modo de producción, solo se cargará una vez después de iniciar un servidor (no todas las solicitudes).

En el modo de desarrollo que se carga en cada petición (ya que es el modo de desarrollo y se reinicia casi todo cada petición)

Así que usted no tiene que preocuparse por ello en modo de producción.

+0

Gracias. Supongo que no me preocuparé por eso entonces. Tiene sentido por qué se verificaría en el modo dev ... en caso de que cambie mi modelo. –

+2

Lo que estás notando es parte de 'cache_classes = false'. – Eric

0

sigue siendo relevante saber cómo desactivarlo incluso en modo de producción. Para fcgi y mod-rails, el tiempo de inicio se reduce.

+0

Si estaba completamente deshabilitado, ActiveRecord no funcionaría. No tendría forma de averiguar qué columnas hay en su mesa. – cpm