显示记录的性能问题

时间:2010-09-04 01:50:04

标签: php sql mysql

我有一张只有3,000条记录的表格 我在主页上渲染这3000条记录而没有分页,我的客户对分页不感兴趣......

所以要完全显示页面需要大约1分钟,15秒。可以做些什么来加快页面加载速度?

我的表结构:

客户表

  • 客户ID
  • 客户名称
  • guider id
  • 和几列

指南表

  • guider id
  • 指南名称
  • 和几列

6 个答案:

答案 0 :(得分:1)

慢下来哪里?查询还是服务?

如果是前者,请参阅上面的评论。如果是后者:

在服务器上启用gzip。否则,将[HTML?]输出捕获到文件,压缩(zip),然后将其作为下载服务。对于任何其他格式,如果您认为其他格式可以使其比浏览器(CSV和Open Office)更好。

如果您要将数据输出到HTML表格中,那么您可能会遇到浏览器在呈现表格之前等待表格结束的问题。您可以将其分成多个表块,例如每500个记录/行,或者尝试CSS“table-layout:fixed;”。

答案 1 :(得分:0)

检查Todos

  1. sql连接(不要打开 用于查询的循环连接) 应该是一次性连接
  2. 检查您的查询并分析它是否使用了一些复杂的逻辑 可以替换
  3. 使用标准类进行sql连接和查询;使用ezsql
  4. sql query best practice

答案 2 :(得分:0)

虽然您可以实现缓存来执行此操作,但您不一定需要这样做,引入不必要的缓存结构通常会导致其自身的问题。根据瓶颈的位置,它甚至可能对你没有多大帮助,或者根本没有帮助。

您需要查看两个地方进行分析:

1)您用来获取数据的查询。看看它的计划,或者如果您不喜欢这样做,请在您喜欢的查询工具中运行它,看看如何很长一段时间才能回来。如果不花太长时间,你就会非常清楚你的瓶颈不是查询。如果查询本身需要很长时间,那么您应该集中精力。

2)您的网页呈现方式。您的网页大小是多少? bytes ?它可能太大了。你能通过格式化缩小尺寸吗?你能更有效地使用CSS来消除页面上的重复样式吗?您使用固定或动态表格布局吗?动态通常会慢一点,特别是对于大型表。尽量避免嵌套表。尽一切可能使页面尽可能小,并继续测试!

答案 3 :(得分:0)

  

同时显示我想要的记录   显示guidername所以,我做了一次   返回指南名称的函数

听起来你需要使用JOIN。这是一个简单的例子:

SELECT * FROM customer JOIN guider ON guider.id=customer.guider_id

这会将您的网页从使用N + 1(3001)查询更改为仅一个。

确保将guider.idcustomer.guider_id都编入索引,并确保使用适当的数据类型(例如整数)。

答案 4 :(得分:0)

这是一个小清单,你应该考虑什么来提高性能,重要性是相对于每一点,所以第一个不是最重要的 - 这取决于你的项目的细节。 / p>

  1. 检查数据库结构。如果只有这两个表,你可能会做的很少。但请记住,有索引和越来越多的记录之类的东西,第二次非规范化表格结构将提高检索结果的速度。

  2. 使用相当一个查询来选择数据,而不是通过ID迭代并重复执行选择

  3. 为指导者运行单独的查询,我假设只有少数几个。将所有导向器保存在数据结构中,例如首先,使用外键将正确的密钥应用于当前记录 - 这可能会节省大量必须从数据库传输到Web服务器的数据。

  4. 使用类似mysqli_result::fetch_all()的内容获取结果集,该内容返回包含所有结果的二维数组。这应该比使用fetch_row()

  5. 遍历每一行更快
  6. 清理HTML输出,使用(外部)CSS。如果您在每行中使用style=" ... a lot of formatting code ..."属性格式化您的内容,这将节省大量输出空间。如果您使用一个大表,请将它们拆分为多个表(某些浏览器在呈现之前等待整个表加载)。

  7. 在很多语言中非常重要:使用字符串构建器将结果连接到输出字符串!

  8. 缓存:考虑每天生成一次输出或每小时生成一次。将其写入打开的缓存文件,而不是查询数据库并在每个请求上构建相同的内容。也许您希望将此生成的文件作为下载提供,而不是在网络上将其显示为纯HTML网站。

  9. 最后但同样重要的是,检查与Web服务器和数据库的连接,服务器负载以及请求数。如果您的服务器负载很重,那么这里的所有季节可能有助于减轻负载,或者您只需要升级硬件。

答案 5 :(得分:0)

LOL
每个人都在谈论大男孩玩具,比如数据库结构,缓存和东西 虽然问题很可能仅仅出现在HTML和浏览器中。

只是将整个HTML表格拆分成块将有助于第一个块立即显示,而其他人最终将会出现。

只有那些说首先描述整件事的人​​才是对的 试图在没有分析结果的情况下回答是在黑暗中拍摄。