实现MySQL搜索结果分页

时间:2011-02-21 15:04:04

标签: mysql perl

这应该是一个相当普遍的问题。我在stackoverflow问题数据库中找不到解决方案。我不确定我做了正确的搜索。

我运行MySQL,CGI / Perl站点。可能是每天1000次点击。用户可以在数据库中搜索该网站。 where子句可能变得非常冗长。我每页显示10个项目,并为用户提供转到下一页和上一页的链接。目前,每次用户点击“上一页”或“下一页”链接时,我都会进行新的搜索。我用

LIMIT num-rows-to-fetch OFFSET num-rows-to-skip

以及查询语句。但是,响应时间对于后续搜索来说太过分了。这只会随着我添加更多用户而变得更糟。我试图看看能否以更好的方式实现这一点。

如果你能给我一些指示,我会非常感激。

3 个答案:

答案 0 :(得分:1)

如果您不介意使用Javascript,则应检查DataTables。这样您就可以将所有行发送到客户端,并在客户端完成分页。

如果它不是一个选项,那么你可以尝试使用mod_perl或CGI :: Session来保存页面查询之间的查询结果,这样你就不需要一次又一次地查询mysql。

答案 1 :(得分:0)

您可以尝试分析查询以找出导致数据库最麻烦的部分。如果存在联接,则可以创建包含关键字段和查询中使用的可能过滤器字段的索引。但是,根据数据库的布局和大小,这可能会创建大量索引。如果查询可能发生显着变化,如果您没有为特定案例创建索引,则可能仍然处于亏损状态。在任何情况下,我会首先分析查询,试图找出是什么使查询如此缓慢。如果导致性能不佳的一个主要原因,您可以尝试在其上抛出索引。

另一种方法是将搜索结果缓存到内存中并从那里进行分页,完全避免数据库往返。根据您的数据库大小,您可能希望将搜索结果限制为合理的数字。

答案 2 :(得分:0)

我从未使用过这个模块,所以无法保证它的性能,但看看DBI::ResultPager