Si ninguna de las sugerencias anteriores funciona, sugiero eliminar a Django de la ecuación y ejecutar este sql en bruto en su base de datos. Supongo que en sus nombres de tabla, por lo que puede que tenga que ajustar en consecuencia:
SELECT * FROM valor v WHERE v.robot_id = [robot_id] ORDER BY id DESC LIMIT 1;
¿Eso es lenta? Si es así, haga que su RDBMS (¿MySQL?) Le explique el plan de consulta. Esto le indicará si está realizando escaneos completos de tablas, lo que obviamente no quiere con una tabla tan grande. También puede editar su pregunta e incluir el esquema de la tabla valor
para que podamos verla.
Además, se puede ver el SQL que Django está generando al hacer esto (utilizando el criterio de consulta proporcionado por Peter Rowell):
qs = Valor.objects.filter(robot=r).order_by('-id')[0]
print qs.query
Asegúrese de que SQL es similar a la consulta 'en bruto' que he publicado encima. También puede hacer que su RDBMS le explique ese plan de consulta.
¿Tiene una estructura muy adornado de las relaciones ForeignKey, OneToOneField o ManyToManyField? –
fwiw, esto es lento porque está seleccionando todo en la tabla 'valor', instanciando una instancia de modelo django para cada entrada cuando la convierte a una lista (a través de' .reverse'), y tomando solo el primer elemento en el lista. – Carson