2016-12-06 36 views
2

好的,當涉及到在mysql中進行分頁時,最佳做法是什麼。讓我更加清楚地說,假設我有一個特定的時間,我有2000條記錄,並且有更多的記錄被插入。而且我一次顯示25個,我知道我必須使用限制來通過記錄進行分頁。但是,我應該爲我的記錄總數做些什麼?每次用戶點擊以請求接下來的25條記錄時,我是否會記錄這些記錄?請不要直接告訴我答案,而應該指向正確的方向。謝謝!用於分頁的MySQL查詢性能

回答

0

最簡單的解決方案是在插入新記錄時繼續正常使用結果集。據推測,每次顯示頁面將使用查詢看起來像以下:

SELECT * 
FROM yourTable 
ORDER BY someCol 
LIMIT 25 
OFFSET 100 

當用戶頁面來回,如果有新的數據進來,有可能是某個網頁可能會從它是什麼改變先前。從邏輯的角度來看,這並不壞。例如,如果您有按字母順序排列的產品列表並且出現了新產品,則用戶將以相當不錯的方式收到此信息。

至於計數,只要有數據支持添加新頁面,您的代碼就可以移動到下一頁。添加新記錄可能意味着需要覆蓋整個表的更多頁面,但它不應該影響用於確定何時停止允許頁面的邏輯。

如果你的表有一個日期或時間戳列表示添加記錄的時間,那麼你可能實際上可以將整個結果集限制在一個快照中。在這種情況下,您可以防止新數據進入給定會話。

+0

謝謝!但我更關心表現。我應該每次都閱讀嗎?大公司如何做到這一點。每當用戶轉到下一頁時,我認爲他們不會計數! – Jonathan

+0

@Jonathan你甚至不需要計算AFAIK。只需選擇一個頁面大小並嘗試查詢。當你沒有收到任何東西時,你知道你已經超過了桌子的大小。無論如何,正如你指出的那樣,桌子的大小是不斷變化的。 –

+0

的確如此,但我該如何向用戶展示他們正在查看的頁面? – Jonathan

0

3 sugggestions 1.只刷新數據網格,同時通過ajax(或)存儲計數在會話中選擇搜索參數的下一個按鈕。 2.使用高級的memcache可以在所有用戶之間共享。根據過濾器參數生成唯一的密鑰並保持計數。所以你不會碰到數據庫。當新記錄被添加時,您需要清除現有的memcache密鑰。這需要memache運行。 3.創建一個索引,如果你點擊數據庫來獲取計數。對性能沒有太大影響。