2011-08-26 69 views
0

我有一个相当大的表格,根据查询需要大约10-20秒到fetch。这使得网站看起来比较慢。提取mysql php表格很慢

我在考虑用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秒。我定时对页面的各个部分进行计时以识别该部分。

+0

数据的大小是多少? –

+0

使用限制不会影响mysql的性能,它仍然提取所有数据,然后丢弃它的一部分。实际上,mysql的工作原理是一样的。 – Furicane

+0

最大的是约3000条记录。他们大多数在100年代是在1000年代。 – theking963

回答

1

这不会加快查询本身表现出这么大的表,因为MySQL的做的第一件事就是实现整个查询,并使用分页它后只需要所需数量的结果。考虑使用nidexes,或者消除连接数,尝试sevaral简单查询。

+0

限制*可以*更快,特别是当您不应用分类时。 – GolezTrol

+0

人们几乎无法想象或多或少复杂的查询wuthout排序虽然。 – zapadlo

0

如果它没有必要在一个页面

+0

我在问题中说我不想使用分页,因为它限制了页面中可以搜索的内容。 – theking963

+0

-1 op在使用浏览器的ctrl + f功能时特别说没有分页。 –

0

它包含多少条记录?对于这样的查询,20秒很长。但取决于您如何衡量它,您不仅获得了查询本身,还获得了将结果推送给客户端的流量。

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

0

一块一块地抓取会更慢。使用order by子句的查询LIMIT仍然必须处理表中的所有行,以便可以正确排序结果,然后应用LIMIT。换句话说,如果你有10,000行并且一次抓取100个数据,你会让数据库运行100个完整的查询。换句话说,处理1,000,000行数据的数据,就结果显示10,000 - 1%的效率而言,可以找到v.s.的行。行服务。

你应该做的是使用multipart/x-mixed-replace响应,并在脚本获取/处理它们时发送响应块。这可以让你运行一个查询,并且仍然以容易消化的块形式提供整个事情。

0

P.S.我不想使用分页。我想在 的一页中显示所有内容(优点:CTRL + F) 如果我是你,我会问自己:我想知道应用程序的用户是否想要分页。

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

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

+0

那里的搜索功能将记录限制为大约1000条记录。 – theking963

0

您当然不会改善响应时间,但是,您可以在每个请求前显示消息或进度栏。因此,用户将会了解该流程需要多长时间。 如果您的表格很大,并且想要在一个页面中显示所有信息,那么除非您改进硬件,否则无法更快地制作。

0

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

+0

它不能被缓存。 – theking963