我有一個顯示分頁搜索結果的Django應用程序。每個頁面顯示20個結果,我在底部有一個分頁欄,顯示比當前頁面小5頁(比如Google)的5頁。問題是,對於分頁欄,我調用count()來獲取結果總數,以便知道當前頁面之前是否有5頁結果。Django:替代計數()
問題是更普遍的查詢可能需要大約10秒來執行count()
。我實際上並不關心確切的數字,因爲我的大多數用戶可能永遠無法達到結果的結尾。有什麼方法可以估計count的輸出,或者更一般地說,估計查詢返回結果的數量?
這是目前我的查詢來獲得實際結果。
results = Item.objects.filter(title__icontains=query).order_by('views')[offset:limit]
的offset
和limit
變量指的是在當前頁上所示的結果的段。我能看到解決我的問題的唯一方法是提前5頁的結果段並檢查它是否爲空。然而,該解決方案有很多邊緣案例,如果有更簡單的解決方案,我真的不想花一天時間編寫代碼。
你可以使用EXPLAIN它會返回估計qeury需要檢查的行數。 –
@Raymond Nijland你能提供一個例子嗎?有沒有辦法通過django使用EXPLAIN,或者我必須編寫自己的原始sql? – Sam