Forum: Rails-ES OT: Sobre optimización de SQL - era : Top 100 mundial y optimización

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.
Silvio Q. (Guest)
on 2008-10-14 16:25
(Received via mailing list)
El día 13 de octubre de 2008 12:11, Fernando C.
<removed_email_address@domain.invalid>
escribió:> (que yo sepa, y he probado bastantes cosas).
>
> Probablemente, la no-optimización del motor se debe a que no entiende de
> ingeniería social, y piensa que las probabilidades de que yo me guarde a
> un usuario que ha escrito un mensaje son iguales que las de que yo me
> guarde al tío que más escribe; pero en realidad, no es así... y cuanto
> más probable sea que me guarde al tío que más escribe, mejor será el
> enfoque por fecha (rápidamente encontraré los 25 primeros de mis
> favoritos) y peor el enfoque por usuario (la cantidad de contenidos de
> mis usuarios favoritos será muy grande).

Me tomé la libertad de cambiar el asunto, ya que nos estamos desviando
del general y de ROR.

El motor no entiende de ingeniería social es una gran verdad, pero la
otra verdad es que la ingeniería social no entiende acerca de
almacenamiento y diseño para RDBMS. Je!


Supongo que estás usando MYSQL. No conozco en profundidad
cómotrabaja, pero creo que puedo trasladar mi experiencia con PostgreSQL
al caso. El motor lo que hace es buscar entre sus estadísticas la
mejor forma de acceder a los datos. El mismo query, con distintos
filtros, no tiene el mismo plan. Yo creo que si ajustás los índices,
el motor va a encontrar el mejor plan para el 100% los casos..

Si tu usuario tiene mucho movimiento, el mejor plan es recorrer
descendentemente por fecha de creación y verificar si corresponde o no
al usuario filtrado, tal cual como estás haciéndolo. Supongo que este
es el plan que se ejecutará en el 99% de tus casos, por lo cual es
válido que lo fuerces.

Pero si tu usuario tiene poco movimiento (imaginemos unos 1000
registros), quizás el mejor plan es seleccionar todos los registros
del usuario, para luego ordenarlos por fecha de creación en forma
descendente. Este plan se ejecutará muy pocas veces, quizás sólo para
los bots de buscadores, pero te aseguro que será instantáneo.

Si te interesa un poco el tema y tenés tiempo de investigar, probá de
meterle los índices que te digo (usuario_id), actualizar las
estadísticas y ver qué plan genera para ambos casos (y postear el
resultado de la prueba, que al menos a mí me interesa el tema).

Saludos!
Silvio
This topic is locked and can not be replied to.