Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加速搜索结果显示的最佳方法_Php_Mysql_Performance_Search_Lucene - Fatal编程技术网

Php 加速搜索结果显示的最佳方法

Php 加速搜索结果显示的最佳方法,php,mysql,performance,search,lucene,Php,Mysql,Performance,Search,Lucene,我们已经为一个mySQL数据库设计了一个搜索结果系统原型,该数据库有大约200万个名称和地址,以及300万个相关订阅和会议出席记录 在执行搜索并返回所有结果的那一刻,对于每个结果,我会执行第二个查询,以查找订阅/会议中此人的唯一ID。我在所有重要列上都有索引,各个查询在phpMyAdmin(0.0xxx秒)中执行得非常快,但会将其输入网页以显示(PHP,使用DataTables分页),页面渲染需要几秒钟。我们尝试将数据移植到Lucene数据库,这就像闪电一样,但瓶颈似乎仍然是显示结果,而不是检索

我们已经为一个mySQL数据库设计了一个搜索结果系统原型,该数据库有大约200万个名称和地址,以及300万个相关订阅和会议出席记录

在执行搜索并返回所有结果的那一刻,对于每个结果,我会执行第二个查询,以查找订阅/会议中此人的唯一ID。我在所有重要列上都有索引,各个查询在phpMyAdmin(0.0xxx秒)中执行得非常快,但会将其输入网页以显示(PHP,使用DataTables分页),页面渲染需要几秒钟。我们尝试将数据移植到Lucene数据库,这就像闪电一样,但瓶颈似乎仍然是显示结果,而不是检索结果

我想这可能是由于在浏览器中构建、服务和呈现页面的开销造成的。我想我可以通过执行GROUP_CONCAT来删除上面提到的子查询,以获取原始查询中的订阅代码,但如何在打开结果的情况下加快页面的显示速度


我认为使用AJAX/服务器端分页进行查询可能是一种可行的方法(可能会得到50个结果,查询更小,页面更小,并且可以更快地提供服务)但我欢迎你们提出的任何建议。

即使对数据表使用分页,尽管使用了

一次加载200万行总是呈现得很慢。您必须进行服务器端分页,可以使用AJAX或普通PHP脚本


您还可以考虑使用缓存系统来加速从服务器加载数据,并且在不需要的时候避免调用数据库。如果您的数据可以在时间上随机变化,那么您可以总是使用一个函数来检查自上次缓存数据以来数据是否发生了变化,如果是这样的话,更新缓存的数据。

您能否提供任何sql示例/解释/架构信息,包括索引?随着毫秒数的增加,第二次查询可能会限制您。您是否尝试过在不使用“DataTables”的情况下呈现它@Simonatmso.net-下面是一个按姓名搜索某人的示例查询:-订阅查找查询中的内容比需要的要多得多,因为系统中的其他地方使用了相同的查询。可能只为搜索结果编写单独的较小版本。@Rob I有-似乎没有太大区别。我想页面仍然是由于返回的是完整的html,所以我们没有数据表来为我们分页。我在一些报告中遇到了完全相同的问题,这完全取决于webbrowser处理返回的html的seer量。正如下面提到的,服务器端分页是解决方案,所以限制为每页50个左右的返回结果。缺点是它的结果在数百页的lage数据集中。我一直在做的另一个选择是生成HTML,但不渲染/输出到屏幕。相反,我一直在将其写入PDF,然后将PDF存储在文件系统中,并使PDF可供用户使用。这具有较高的初始负载,但也允许我在将来调用类似于搜索一个视图,也许,并随机同步该视图?我不是每次都返回所有200万行,但结果计数确实可以达到五位数……这对服务器来说是一次渲染到浏览器的大量数据。我越是考虑这一点,越明显,越小的结果越直接改进……以任何大型网站为例。它们都不会一次加载那么多数据。服务器端分页和排序,以及通过AJAX自动完成搜索,如果不是,则通过POST.True。有没有关于缓存系统的建议可以做到这一点?我已经考虑过mySQL视图是否偶尔刷新(每隔几分钟就添加一次新记录,更新频率较低-实时性并不重要)这可能更好-你的想法?这不是服务器端的问题,而是浏览器的问题。你可以阅读一些网站上的PHP缓存,例如,或者。我只使用过CakePHP框架及其缓存,所以我对其他技术不太熟悉。