1

我们一直在为一个具有大约 200 万个姓名和地址以及 300 万个相关订阅和会议出席记录的 mySQL 数据库设计一个搜索结果系统的原型。

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

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

我想的很少,经常使用 AJAX/服务器端分页查询可能是这里的方式(可能会得到 50 个结果,查询更小,页面更小并且可以更快地提供服务)但我欢迎你们提出任何建议有。

4

1 回答 1

2

即使您使用 Datatables 进行分页,所有结果都会首先加载到页面源代码中,尽管您使用的是服务器端功能。

一次加载 200 万行总是会缓慢渲染。您必须进行服务器端分页,它可以通过 AJAX 或普通 PHP 脚本。

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

于 2013-03-27T10:11:46.003 回答