estoy usando Django/Apache/sqlite3 y tengo un modelo de Django que tiene este aspecto:Mejorar el rendimiento de la consulta de Django DB
class Temp_entry(models.Model):
dateTime = models.IntegerField() #datetime
sensor = models.IntegerField() # id of sensor
temp = models.IntegerField() # temp as temp in Kelvin * 100
que estoy tratando de conseguir los últimos 300 artículos Temp_entry a colocar en un gráfico. Lo hago de esta manera:
revOutsideTempHistory = Temp_entry.objects.filter(sensor=49).order_by('dateTime').reverse()[:300]
Sin embargo, esta consulta toma ~ 1 segundo. ¿Hay alguna manera de mejorar esto? He buscado y he encontrado que order_by es terriblemente ineficiente, ¿así que espero que haya una alternativa viable?
Una alternativa que pensé, pero no puedo entender cómo implementarla, sería ejecutar la consulta cada 20 minutos y mantenerla en la memoria caché, eso también sería aceptable, ya que los datos pueden estar un poco añejos sin problemas efectos.
Gracias Alexey, dos preguntas de seguimiento: ¿hay alguna manera de que la consulta se ejecute cada 20 minutos en lugar de esperar que la solicitud compruebe si está obsoleta? ¿Qué hace el db_indexes? – Andy
Andy, db_index solo crea un índice de base de datos normal, lo que aumentará la velocidad de una consulta. Sin embargo, esta aceleración no es nada en comparación con el almacenamiento en caché. También tenga en cuenta que tales DB como Mysql y Postgre tienen caché interno de consultas, pero no están seguros acerca de sqlite. Según la primera pregunta: sí, puedes usar el comando django y algo así como cron o apio, pero creo que esta no es una buena solución –
Gracias Alexey, usando los índices y el almacenamiento en caché, la vista se está procesando en un tiempo aceptable – Andy