【问题标题】:Display lots of mysql records显示大量 mysql 记录
【发布时间】:2011-05-14 10:01:19
【问题描述】:

如果我有一个包含 7000 条记录的 mysql 数据库,我必须在我的网页上显示所有 7000 条记录。是否有任何提示和技巧可以加快处理速度(浏览器在显示所有记录之前实际上会崩溃)我知道我应该查询它以减少选择的记录数,但我实际上需要显示 7000...

【问题讨论】:

  • 页面是在服务器上生成的吗?您是否使用 Ajax 并自己生成 DOM?分页结果是一种选择吗?如果服务器端,您使用哪种语言生成网页?如果是客户端,使用哪个浏览器?
  • PHP、Firefox(我的偏好),目前我只是选择所有记录并将它们显示在同一页面上的一个简单表格中

标签: mysql select


【解决方案1】:

打开输出缓冲:http://php.net/manual/en/function.ob-start.php

<?php

ob_start(); 

// do work...

ob_end_flush();

?>

编辑

以下 php 在 0.014 秒内获取 10K 产品并将其输出为一个没有问题的表格。

<?php

ob_start(); 

$conn = new Mysqli("localhost", "vldb_dbo", "pass", "vldb_db");

$startTime = microtime(true);

$result = $conn->query(sprintf("call list_products(%d)", 10000));

echo "<table border='1'>";

while($row = $result->fetch_assoc()){
 echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $row["prod_id"], $row["name"]);
}

echo "</table>";

echo sprintf("<br/>Page generated in %s secs",number_format(microtime(true) - $startTime, 6, ".", ""));

$result->close();   
$conn->close();

ob_end_flush();

?>

SQL 脚本

drop procedure if exists list_products;
delimiter #

create procedure list_products
(
in p_prod_id int unsigned
)
begin
    select * from product where prod_id between 1 and p_prod_id;
end #

delimiter ;

除了运行时潜水外,50K 记录也可以正常工作 - 页面在 0.112902 秒内生成

EDIT2

http://phplens.com/lens/php-book/optimizing-debugging-php.php

摘自上述链接:

加快上述速度的另一种方式 代码将使用输出缓冲。 这将累积输出字符串 内部,并将输出发送到一个 在剧本结尾处拍摄。这 减少网络开销 基本上以更多的成本为代价 内存和延迟增加。在 我的一些代码完全由 回声语句,性能 改进了 15% 观察到。

【讨论】:

  • 所以我会在这些标签中执行我通常的 mysql_connect、查询、数组等操作?
  • 这表明我缺乏经验,但是在 phpmyadmin 中我将 SQL 脚本粘贴到“运行 SQL”窗口中的哪个位置?或者别的地方……
  • 你可能想用你的“select * from table where..”替换我的存储过程调用
  • 如果我运行 php 页面,我会得到这个:致命错误:在第 13 行的 C:\xampp\htdocs\php_paging.php 中的非对象上调用成员函数 fetch_assoc()跨度>
  • 顺便说一句 - 否决投票者请下次发表评论,以便我知道你的抱怨是什么 - tia
【解决方案2】:

我假设您在 PHP(我不熟悉)中执行此操作,但这对所有语言都是通用的。

先将 7000 条记录查询到一个列表中,然后在一个脚本页面中显示所有列表(例如 php、jsp for java 等)。不要让您的 php 页面打开连接,从列表中读取每个项目并显示它们。客户端(浏览器)可能会无限期等待并导致会话超时

【讨论】:

  • 通过列表,我假设您不是指
    • 等...为什么不允许 php 打开连接?我以为 PHP 和 Mysql 齐头并进!?
  • 按列表,我的意思是一个数组...我不是说打开连接并同时执行 HTML/PHP 脚本...首先将所有 7000 条记录读入一个数组然后填充它们在 php 中。
【解决方案3】:

f00:如果他将结果显示在表格中并且浏览器将继续显示数据,那么无论如何它们都不会正确显示。据我所知,表格不会正确渲染(在Firefox中)...... 我认为分页表是唯一可能的解决方案...

【讨论】:

  • 我正在使用 jQuery 插件 Datatables 对结果进行分页(我知道这是客户端而不是服务器端)
  • 我认为这与获取 7000 个结果的 php/mysql 无关……是吗?
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多