2017-05-29 118 views
0

我正在研究管理系統網站,該網站由從服務器上運行的Postgres數據庫中提取的數據表組成。我一直在通過編寫PHP查詢並從數據庫中回顯數據行來檢索數據。這適用於我網站上的所有頁面,除了一個嘗試從超過50,000條記錄的表中檢索數據 - 當我嘗試加載該頁面時,它會超時或完全崩潰瀏覽器。使用pgAdmin查看此表中的數據時,大約需要10-20秒。加載jQuery DataTable時,網頁崩潰 - 行數太多?

有沒有人有任何想法爲什麼發生這種情況,或者我怎麼能加快我的數據表加載時間?謝謝!

編輯

這是我如何使用PHP查詢數據庫:

$query = "SELECT respondentid, pro, homephone, otherphone, fname, lname, note from respondent"; 
$result = pg_query($query); 
echo "<table id='respondents'>"; 
echo "<thead> <tr> <th>Headings</th> </tr></thead>"; 

while($row = pg_fetch_array($result)) { 
    echo '<tr>'; 
    echo '<td>' . $row['columnnames'] . '</td>'; 
    echo "</tr>"; 
    echo "</table>";   

這裏是數據庫列:

respondentid serial not null, 
pro character varying(3), 
homephone character varying(15), 
otherphone character varying(15), 
fname character varying(15), 
lname character varying(20), 
note text 
+0

你可以發佈在日誌中的錯誤信息,您的查詢,你的表結構和解釋查詢的計劃嗎? – Arkhena

+0

您是否嘗試過[LIMIT查詢優化](https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html)?例如。 'LIMIT 50' –

+0

@Arkhena編輯我的帖子一些更多的細節。我不確定日誌中的錯誤消息,因爲我的頁面已經存在很久了,我不知道要查找什麼。 – ellenmichellen

回答

1

您可以檢索所有的行從這個快速解決方案的表格:

  • 包裹代碼while循環,
  • 添加ORDER BY子句查詢,
  • 選擇具有LIMIT條款只有幾行。

echo "<table id='respondents'>"; 
echo "<thead> <tr> <th>Headings</th> </tr></thead>"; 

$rows_total_result = pg_query('SELECT COUNT(*) FROM respondent'); 
$rows_total_row = pg_fetch_row($rows_total_result); 
$rows_total = $rows_total_row[0]; 

$offset = 0; 
$row_count = 1000; 

while (($offset + $row_count) <= $rows_total) { 

    $query = "SELECT respondentid, pro, homephone, otherphone, fname, lname, note " 
      . "from respondent ORDER BY respondentid " 
      . "LIMIT {$row_count} OFFSET {$offset}"; 
    $result = pg_query($query); 

    while ($row = pg_fetch_array($result)) { 
     echo '<tr>'; 
     echo '<td>' . $row['columnnames'] . '</td>'; 
     echo "</tr>"; 
    } 

    $offset += $row_count; 
} 

echo "</table>"; 

雖然這並不能解決瀏覽器崩潰的問題,因爲數據量很大,執行時間可能很長。

常見的解決方案是實現分頁瀏覽大表。

+0

當我嘗試這樣做時,收到錯誤消息「致命錯誤:最大執行時間超過30秒」,錶停止加載,看起來不像數據表。 – ellenmichellen

+0

是的,我剛剛編輯了我的答案來解釋這個問題。請檢查一下。 –