为了更详细地描述它,如果我有一个区域的图像地图,当单击时,将执行查询以获取有关该区域的更多信息。
我的客户希望我在将鼠标悬停在该区域图像地图上时显示大致数量的搜索结果。
我的问题是如何缓存?或者在不严重耗尽服务器内存资源的情况下获得该数字?
顺便说一句,如果这是必要的信息,我正在使用 php 和 mysql。
4 回答
您可以定期执行查询,然后存储结果(例如,在不同的表中)。
结果不会是绝对最新的,但会是一个很好的近似值,并且会减少服务器上的负载。
MySQL 可以为您提供查询将返回的大致行数,而无需实际运行查询。这就是 EXPLAIN 语法的用途。
您在“SELECT”之前使用“EXPLAIN”运行查询,然后将行列中的所有结果相乘。
准确性是高度可变的。它可能适用于某些类型的查询,但对其他类型的查询毫无用处。它利用 MySQL 优化器保留的有关您的数据的统计信息。
注意:定期(即每月一次)在表格上使用 ANALYZE TABLE 可能有助于提高这些估计的准确性。
您可以使用区域的 id 创建另一个表,然后创建一个脚本,该脚本以较慢的时间(例如晚上)在所有区域上运行,并用数据填充这个额外的表。
然后,当您将鼠标悬停时,您会从这个新表中获取 ID,并且最多可以使用一天。
这样做的问题可能是你没有很慢的时间,或者在晚上完成的运行需要很长时间并且过程非常繁重。
编辑您的评论。
如果可以,请选择一个较大的地区或国家,在您选择的 SQL 浏览器中查询该地区并查看所需时间。
如果它太多,您可以分发它,以便某些国家/地区将在特定时间执行,小国一起执行,而大国在某个时期单独执行。
您是否担心当滚动事件发生时您根本不想去数据库获取此信息,或者您是否认为查询太慢并且您想要来自数据库的信息,但更快?
如果您的查询速度较慢,您可以对其进行调整,或使用已经给出的其他一些建议。
或者,为了完全避免数据库命中,您似乎在此地图上有有限数量的区域,您可以定期对所有区域运行查询并将这些数字保存在内存中。