Если ни одно из предыдущих предложений не сработало, я бы предложил исключить Django из уравнения и запустить этот необработанный sql для вашей базы данных. Я предполагаю имена ваших таблиц, поэтому вам, возможно, придется скорректировать соответственно:
SELECT * FROM valor v WHERE v.robot_id = [robot_id] ORDER BY id DESC LIMIT 1;
Это медленно? Если это так, заставьте свою СУБД (MySQL?) Объяснить вам план запроса. Это скажет вам, выполняет ли он какое-либо полное сканирование таблицы, которое вам явно не нужно с такой большой таблицей. Вы также можете отредактировать свой вопрос и включить схему для таблицы valor
, чтобы мы могли ее увидеть.
Кроме того, вы можете увидеть SQL, который генерирует Django, выполнив это (используя набор запросов, предоставленный Питером Роуэллом):
qs = Valor.objects.filter(robot=r).order_by('-id')[0]
print qs.query
Убедитесь, что SQL похож на «необработанный» запрос, который я разместил выше. Вы также можете заставить свою СУБД объяснить вам этот план запроса.