我使用Django /阿帕奇/ sqlite3的,我有一個Django的模型,看起來像這樣:提高Django的數據庫查詢性能
class Temp_entry(models.Model):
dateTime = models.IntegerField() #datetime
sensor = models.IntegerField() # id of sensor
temp = models.IntegerField() # temp as temp in Kelvin * 100
我試圖獲得最後300個Temp_entry物品放入一張圖。我這樣做:
revOutsideTempHistory = Temp_entry.objects.filter(sensor=49).order_by('dateTime').reverse()[:300]
但是,這個查詢需要約1秒。有沒有辦法改善這一點?我挖了一遍,發現order_by是無效的,所以我希望有一個可行的選擇?
另一個我想到的,但無法弄清楚如何實現的方法是每20分鐘運行一次查詢並保存它,這也是可以接受的,因爲數據可以稍微陳舊,沒有病態效果。
謝謝阿列克謝,兩個後續問題:有沒有辦法讓查詢每20分鐘運行一次,而不是等待請求來檢查它是否陳舊? db_indexes是做什麼的? – Andy 2011-12-28 07:48:49
Andy,db_index只是創建普通的數據庫索引,這將提高查詢速度。然而,與高速緩存相比,這種加速沒有任何意義。還要注意像Mysql和Postgre這樣的DB有查詢的內部緩存,但不確定關於sqlite。根據第一個問題:是的,你可以使用django命令和類似cron或芹菜的東西,但我認爲這不是很好的解決方案 – 2011-12-28 09:17:26
謝謝阿列克謝,使用索引和緩存視圖渲染在一個可接受的時間量 – Andy 2011-12-28 16:26:21