我有一個頁面查詢數據庫中的產品,然後以30個項目的頁面顯示。當我導航到下一頁時,應用程序會重新查詢數據庫並顯示頁面號。 2等等。如何避免使用ASP Classic和MySQL進行分頁查詢?
如何避免此數據庫重新查詢?我可以將結果存儲在某個地方嗎?我們正在談論1500-2000行/查詢,當我們有400-450個用戶在線時,我們的專用服務器以100%的CPU容量運行。
我有一個頁面查詢數據庫中的產品,然後以30個項目的頁面顯示。當我導航到下一頁時,應用程序會重新查詢數據庫並顯示頁面號。 2等等。如何避免使用ASP Classic和MySQL進行分頁查詢?
如何避免此數據庫重新查詢?我可以將結果存儲在某個地方嗎?我們正在談論1500-2000行/查詢,當我們有400-450個用戶在線時,我們的專用服務器以100%的CPU容量運行。
您是否有足夠的內存預裝整個「目錄」(在應用程序級存儲中),然後讓SQL返回所有結果,但僅存儲索引(在每個會話中)。 類似這樣的: On Application開始:創建我的只讀應用程序級緩存 On搜索:SQL返回所有結果(我假設您必須執行SQL,因此您可以檢查業務條件 關於結果:構建索引列表映射到應用程序緩存 顯示頁面:從應用程序緩存中讀取並顯示適當的範圍
如果您沒有足夠的內存,則「結果」表可能會提供一些優化:在每個會話的基礎上,緩存整個查詢結果放入一個「扁平化」表中,以避免潛在的昂貴(業務邏輯繁重)產品查詢。必須小心檢測查詢何時更改,以便丟棄緩存,並且還有一些服務器端邏輯清理舊的,過期的搜索。
正如我所說的,我要求解決方案的主要原因是爲了避免CPU過載。服務器在100%被堵塞時只有500-600個用戶在線,這似乎不自然。我發現了優化表MySQL命令,該命令適用於MyISAM表,它完全解決了這個問題。執行該命令後,CPU使用率立即降至10-12%。
所以,如果有其他人在那裏運行超載CPU MySQL應用程序,你應該首先嚐試在這裏描述的OPTIMIZE TABLE命令和其他維護任務http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html
使用外部緩存ActiveX或使用'Application'嘗試緩存目的。 – VMV 2013-03-22 11:03:47
不再需要。在數據庫上運行一些MySQL優化命令,處理器使用率立即下降到7-10%。不知道這些命令真的做了什麼。 – 2013-04-23 20:10:16