2017-05-29 1 views
0

私は管理システムのWebサイトで、サーバー上で動作しているPostgresデータベースから取得したデータのテーブルで構成されています。私は、PHPのクエリを記述し、データベースからデータの行をエコーすることによって、データを取得しています。これは、50,000を超えるレコードを持つテーブルからデータを取得しようとしているものを除いて、私のWebサイトのすべてのページで機能します。そのページを読み込もうとすると、タイムアウトするか、ブラウザが完全にクラッシュします。 pgAdminを使用してこのテーブルのデータを表示すると、約10〜20秒かかります。jQuery DataTableをロードするとWebページがクラッシュする - 行が多すぎますか?

これがどうして起こっているのか、私のデータテーブルの読み込み速度を上げる方法を知っている人はいますか?ありがとうございました!

編集

これは私が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

あなたはすべての行を取得することができますこの簡単な回避策を使用してテーブルから:

  • 、クエリにORDER BY句を追加
  • whileループでコードをラップ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

はい、私はこの問題を説明するために私の答えを編集しました。これをチェックしてください。 –

関連する問題