加载jQuery DataTable时网页崩溃 - 行太多了?

时间:2017-05-29 15:02:28

标签: php postgresql datatables

我正在开发一个管理系统网站,该网站包含从服务器上运行的Postgres数据库中提取的数据表。我一直在通过编写PHP查询并回显数据库中的数据行来检索数据。这适用于我网站上的所有页面,除了试图从具有超过50,000条记录的表中检索数据的页面 - 当我尝试加载该页面时,它会超时或完全崩溃我的浏览器。使用pgAdmin查看此表中的数据时,大约需要10-20秒。

有谁知道为什么会发生这种情况,或者我如何才能加快数据表的加载时间?谢谢!

修改

这就是我使用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

1 个答案:

答案 0 :(得分: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>";

虽然这不会解决浏览器崩溃的问题,因为数据量巨大,执行时间可能很长。

常见的解决方案是实现分页以浏览大表。