我们一直在为mySQL数据库建立一个搜索结果系统原型,其中包含大约200万个名称和地址以及300万个相关的订阅和会议出勤记录。
在执行搜索并返回所有结果时 - 对于每个结果,我然后执行第二个查询以查找该人的唯一ID的订阅/会议。我在所有重要的列上都有索引,并且各个查询在phpMyAdmin(0.0xxx秒)内执行得非常快,但是将其提供给要显示的网页(PHP,使用DataTables分页),页面需要几秒钟才能呈现。我们已经尝试将数据移植到Lucene数据库,它就像LIGHTNING,但瓶颈仍然似乎是显示结果而不是检索它们。
我想这可能是由于在浏览器中构建,提供和呈现页面的开销。我想我可以删除上面提到的子查询,通过执行GROUP_CONCAT来获取原始查询中的订阅代码,但是如何加快显示结果的页面?
我想的很少,经常用AJAX /服务器端分页查询可能是这里的方式(可能得到50个结果,查询更小,页面更小,可以更快地提供)但我欢迎任何建议你们可能有。
答案 0 :(得分:2)
即使您使用数据表分页,所有结果也会首先加载到页面源代码中,尽管您使用的是server side feature.
一次加载200万行将始终缓慢渲染。你必须使用服务器端分页,它可以是AJAX或普通的PHP脚本。
您还可以考虑使用缓存系统来加速从服务器加载数据,并避免在不需要时调用数据库。如果您的数据可以随时随机更改,您始终可以使用函数检查自上次缓存数据后数据是否已更改,如果是,则更新缓存数据。