获取mysql php表很慢

时间:2011-08-26 18:40:59

标签: php mysql ajax fetch

我有一个相当大的表,大约需要10-20秒到fetch,具体取决于查询。这使得网站看起来很慢。

我在考虑使用LIMIT来限制结果数量,并使用ajax逐位显示整个表格。

现在我正在使用ajax一次显示整个表格。

我正在考虑做这样的事......

后端:

 $offset = 0;
 $rowsToFetch = 100;
 {
   //Loop
   $query = "SELECT * FROM TABLE_NAME LIMIT $offset, $rowsToFetch"
   $offset = +100;
   $rowsToFetch = +100;
 }

前端:

Call ajax function that will call the back end part recursively and display part by part until finished.

我确信它比那复杂一点。

有更好的方法吗?任何想法如何开始?需要留意的陷阱?

P.S。我不想使用分页。我想在一个页面中显示所有内容(好处:CTRL + F)

编辑:在database(command line)中获取大约需要5-7秒。但在显示记录的网站上大约需要10-20秒。查询大约需要4-5秒。我定时页面的各个部分来识别它。

7 个答案:

答案 0 :(得分:1)

这不会加速查询本身,因为mysql完成的第一件事就是实现整个查询,之后它只需要所需数量的结果。考虑使用nidexes或消除连接数,尝试sevaral简单查询。

答案 1 :(得分:0)

如果没有必要在一个页面中显示如此大的表格,请使用分页

答案 2 :(得分:0)

它包含多少条记录?对于这样的查询,20秒非常长。但是,根据您的测量方式,您不仅可以获得查询本身,还可以获得将结果推送给客户的流量。

在处理查询结果时,您可以尝试flush结果,但我怀疑在您使用Ajax时这是否会对您有所帮助。只有在请求完成后才会处理结果。

答案 3 :(得分:0)

一块一块地取出会更慢。带有order-by子句的LIMIT查询仍然需要处理表中的所有行,以便可以正确地排序结果,然后应用LIMIT。换句话说,如果您有10,000行并且一次获取100个,那么您将使数据库运行100个完整查询。换句话说,处理1,000,000行的数据,最终在行中找到的效率为10,000 - 1%v。行服务。

您应该做的是使用multipart / x-mixed-replace响应,并在脚本获取/处理它们时发送响应块。这使您可以运行单个查询,并且仍然可以在易于理解的块中提供整个查询。

答案 4 :(得分:0)

  

P.S。我不想使用分页。我想要显示一切   一页(好处:CTRL + F)   如果我是你,我会问自己:我想知道应用程序的用户是否想要分页。

因为我相信你不想要分页,但我不相信普通用户希望你的应用程序在一个页面中显示所有内容,以便能够使用ctrl + F.

我也相信,您的普通用户不仅希望拥有分页页面,还希望拥有某种搜索功能。

答案 5 :(得分:0)

您当然不会改善响应时间,但是,您可以在每个请求之前显示消息或进度条。因此,用户将知道该过程需要多长时间。 如果您的表很大并且您希望在一个页面中显示所有信息,那么除非您改进硬件,否则无法做得更快。

答案 6 :(得分:0)

您是在压缩HTTP响应吗? 数据可以缓存在客户端上吗?