我有一个页面从数据库中查询产品,然后显示在 30 个项目的页面中。当我导航到下一页时,应用程序重新查询数据库并显示页码。2 以此类推。
如何避免此数据库重新查询?我可以将结果存储在某个地方吗?我们谈论的是 1500-2000 行/查询,当我们有 400-450 个在线用户时,我们的专用服务器以 100% 的 CPU 容量运行。
我有一个页面从数据库中查询产品,然后显示在 30 个项目的页面中。当我导航到下一页时,应用程序重新查询数据库并显示页码。2 以此类推。
如何避免此数据库重新查询?我可以将结果存储在某个地方吗?我们谈论的是 1500-2000 行/查询,当我们有 400-450 个在线用户时,我们的专用服务器以 100% 的 CPU 容量运行。
正如我所说,我寻求解决方案的主要原因是避免 CPU 过载。服务器在只有 500-600 个在线用户的情况下被 100% 堵塞似乎是不自然的。我发现了优化表 MySQL 命令,它适用于 MyISAM 表,它完全解决了问题。执行命令后,CPU 使用率立即下降到 10-12%。
因此,如果有其他人在运行导致 CPU 过载的 MySQL 应用程序,您应该首先尝试优化表命令和此处描述的其他维护任务http://dev.mysql.com/doc/refman/5.5/en/optimize -table.html
您是否有足够的内存来预加载整个“目录”(在应用程序级别存储中),然后让 SQL 返回所有结果,但只存储索引(在每个会话中)。像这样: 在应用程序开始时:创建我的只读应用程序级缓存 在搜索时:SQL 返回所有结果(我假设您必须执行 SQL,因此您可以检查业务条件 在结果上:构建映射到应用程序缓存的索引列表在显示页面上:从应用程序缓存中读取并显示适当的范围
如果您没有足够的内存,那么“结果”表可能会提供一些优化:在每个会话的基础上,将整个查询结果缓存到“扁平”表中,以避免潜在的昂贵(业务逻辑繁重)产品询问。您必须小心检测查询何时更改,以便您可以丢弃缓存,并且还有一些服务器端逻辑来清理旧的、过期的搜索。