mySQL - 一个大型查询与Ajax个人查询

时间:2009-10-24 20:46:16

标签: php ajax mysql performance

我想没有人会对此有一个明确的答案,但考虑到预测会受到影响。

我正在为Web应用程序开发mySQL数据库,我的问题是:

使用AJAX

创建返回单行的单个查询是否更有效

当用户可能只使用两个或三个结果时要请求100到700行吗?

真的,我问的是服务器2-3个请求的重要性是一个结果还是1个请求的结果是100到700个?

谢谢,

标记

6 个答案:

答案 0 :(得分:2)

这里有一些事情需要考虑,

在单独的查询中进行多次选择然后在php脚本中处理结果显然会面临网络延迟的开销,因为数据必须在客户端和mysql服务器之间来回传输,

但是正如你所说,用户很可能只会查看一些结果,所以如果你将结果集限制为10条记录并触发某种事件来获取更多记录,那就更好了。一种方法是在10条记录之后有一个更多的链接,这将获取另外10条记录,依此类推。

答案 1 :(得分:1)

如果您只向“单行”发送请求,您将有更多阶段可以缓存响应。如果数据在几分钟内不可能发生变化,则客户端也可以通过指定有效日期来缓存结果。拥有大数据,您甚至可以使用ETAG,这可以为您节省大量带宽。

答案 2 :(得分:1)

这取决于返回数据的大小。

如果你的完整结果集大于um ...比如100k,那么你的用户可能会从ajax版本中获得更好的体验,从而获得有限数量的行。 在浏览器中渲染大型返回集也需要更长的时间。

进行多次小型查询会增加数据库负载,但带宽显着下降,因此用户看起来更快。数据库端10对700行的执行时间可能非常相似,但传输和渲染时间将会有很大差异。

答案 3 :(得分:1)

您可能希望计算从数据库获取数据所需的时间。如果它需要太长时间,这需要你决定,但我猜想超过10秒,那么你可能想把它分成更小的请求,但700会很多。您可以确定需要多长时间,但是您可能希望尝试每个请求花费不到1秒的时间,并查看将要执行的请求数。

分析很重要,因为数据库可能不是问题。如果你要构建一个大表,例如1000行,那么如果你完全创建表然后渲染它,那将需要一段时间。

你最好的选择是在firefox中使用firebug,看看获取数据需要多长时间,因为你已经分析了数据库连接实际需要多长时间,然后你可以看到它需要多长时间一旦从服务器返回信息,就显示数据。

分析是最好的选择,因为firebug允许您分析javascript,看看您是否真的需要优化数据库。

答案 4 :(得分:0)

返回700个请求将比返回3个结果大一个数量级。如果您通常知道您的普通用户只对5个或更少的结果感兴趣,那么可以安全地假设您可以提前返回这些结果并省去浪费带宽的麻烦,这些额外的695个结果没有人真正关心。

毕竟,关于为用户提供他们想要的东西。如果700是过度杀伤,只需将其剪掉并省去麻烦。

如果每行数据为1kb,这可能是一种过高的估计,那么每个请求(加上标题)与700kb的差异为5kb。鉴于一些用户,这种情况会很快加起来。

答案 5 :(得分:0)

我非常赞同其他人不得不说的话。不过,我会补充一点。这实际上取决于您的数据以及您打算如何使用和/或缓存它。如果700-1000行可以缓存在哈希表中,并且每个人都将从该集合中提取位,那么这两种方法的组合将起作用。定期拉取和缓存大集(根据需要使缓存无效),但只通过Ajax推送特定客户端需要的内容。这为您提供了单个大型查询(通常效率更高)的优势,但只推送客户端需要的数据(因为网络通常是最大的瓶颈)。

总是做詹姆斯布莱克所说的...简介。这是唯一可以确定的方法。