3
比方說,我想獲取返回大約10k條記錄的查詢的最後50條記錄,並將其放在一個包含1M記錄的表中。我可以做(在訂貨的計算成本):我應該在切分前N個記錄之前顛倒查詢集的順序,還是將其計數以切分最後N個記錄?
data = MyModel.objects.filter(criteria=something).order_by('-pk')[:50]
我也能做到(在成本的2次數據庫的訪問):
# assume I don't care about new records being added between
# the two queries being executed
index = MyModel.objects.filter(criteria=something).count()
data = MyModel.objects.filter(criteria=something)[index-50:]
這是隻是一個普通的關係型數據庫更好沒有索引criteria
(例如postgres在我的情況下,沒有列表存儲或任何幻想)?最重要的是,爲什麼?
如果表或查詢集顯着更大(例如10M行表中的10萬條記錄),答案會改變嗎?
當您使用'.filter'時,Django是否強加一個有意義的順序?通常,在SQL數據庫中,如果使用'order by'或其等價物,*最後50行*僅有意義。再次運行相同的查詢可能不會以相同的順序返回行。 –
我在創建儀表板的環境中問這個問題,我只想顯示一些合理的最近的客戶評論。訂貨嚴格性對於這種特殊情況並不重要。 – Escher
*在沒有「order by」或其等價物的情況下,合理的近期*也沒有意義。 –