2011-08-26 76 views
0

我有一個相當大的表格,根據查詢需要大約10-20秒到fetch。這使得網站看起來比較慢。提取mysql php表格很慢

我在考慮用LIMIT來限制結果的數量,並用ajax來一點一點地顯示整個表格。

現在我正在使用ajax來一次顯示整個表格。

我想到做這樣的事情的......

後端:

$offset = 0; 
$rowsToFetch = 100; 
{ 
    //Loop 
    $query = "SELECT * FROM TABLE_NAME LIMIT $offset, $rowsToFetch" 
    $offset = +100; 
    $rowsToFetch = +100; 
} 

前端:

Call ajax function that will call the back end part recursively and display part by part until finished. 

我敢肯定它比這更復雜一點。

有沒有更好的方法來做到這一點?任何想法如何開始?尋找的陷阱?

P.S.我不想使用分頁。我想在一個頁面中顯示所有內容(優點:CTRL + F)

編輯:在database(command line)中提取大約需要5-7秒。但是在顯示記錄的網站中大約需要10-20秒。查詢大約需要4-5秒。我定時對頁面的各個部分進行計時以識別該部分。

+0

數據的大小是多少? –

+0

使用限制不會影響mysql的性能,它仍然提取所有數據,然後丟棄它的一部分。實際上,mysql的工作原理是一樣的。 – Furicane

+0

最大的是約3000條記錄。他們大多數在100年代是在1000年代。 – theking963

回答

1

這不會加快查詢本身表現出這麼大的表,因爲MySQL的做的第一件事就是實現整個查詢,並使用分頁它後只需要所需數量的結果。考慮使用nidexes,或者消除連接數,嘗試sevaral簡單查詢。

+0

限制*可以*更快,特別是當您不應用分類時。 – GolezTrol

+0

人們幾乎無法想象或多或少複雜的查詢wuthout排序雖然。 – zapadlo

0

如果它沒有必要在一個頁面

+0

我在問題中說我不想使用分頁,因爲它限制了頁面中可以搜索的內容。 – theking963

+0

-1 op在使用瀏覽器的ctrl + f功能時特別說沒有分頁。 –

0

它包含多少條記錄?對於這樣的查詢,20秒很長。但取決於您如何衡量它,您不僅獲得了查詢本身,還獲得了將結果推送給客戶端的流量。

當您處理查詢結果時,您可以嘗試使用flush結果,但我懷疑當您使用Ajax時是否會對您有所幫助。結果將僅在請求完成時處理。

0

一塊一塊地抓取會更慢。使用order by子句的查詢LIMIT仍然必須處理表中的所有行,以便可以正確排序結果,然後應用LIMIT。換句話說,如果你有10,000行並且一次抓取100個數據,你會讓數據庫運行100個完整的查詢。換句話說,處理1,000,000行數據的數據,就結果顯示10,000 - 1%的效率而言,可以找到v.s.的行。行服務。

你應該做的是使用multipart/x-mixed-replace響應,並在腳本獲取/處理它們時發送響應塊。這可以讓你運行一個查詢,並且仍然以容易消化的塊形式提供整個事情。

0

P.S.我不想使用分頁。我想在 的一頁中顯示所有內容(優點:CTRL + F) 如果我是你,我會問自己:我想知道應用程序的用戶是否想要分頁。

因爲我相信你不想分頁,但我很難相信普通用戶希望你的應用在一個頁面中顯示所有內容,以便能夠使用Ctrl + F。

我也相信,您的普通用戶不僅希望分頁,還希望具有某種搜索功能。

+0

那裏的搜索功能將記錄限制爲大約1000條記錄。 – theking963

0

您當然不會改善響應時間,但是,您可以在每個請求前顯示消息或進度欄。因此,用戶將會了解該流程需要多長時間。 如果您的表格很大,並且想要在一個頁面中顯示所有信息,那麼除非您改進硬件,否則無法更快地製作。

0

您是否正在壓縮HTTP響應? 數據可以緩存在客戶端上嗎?

+0

它不能被緩存。 – theking963