我可以使用MySQL临时表来存储搜索结果吗?


Can I use MySQL temporary tables to store search results?

我有一个用PHP编写的搜索页面,它需要在MySQL数据库中搜索,结果需要排序。这个搜索页面将被许多用户访问(>1000在任何时候)。

然而,在MySQL中对搜索结果进行排序是不可行的,因为它会非常慢。

我正在考虑将每个搜索结果存储到一个临时表中(不是MySQL临时表),表名存储在另一个表中以供参考,如下所示:

| id | table_name | timeout |
-----------------------------
| 1  | result_1   | 10000   |
| 2  | result_2   | 10000   |

然后,我可以使用临时表对任何搜索结果进行排序,而无需重新构建(进行一些修改)查询。

每个表将根据指定的超时被删除。

假设我不能修改查询中使用的现有表的结构,这是一个很好的解决方案还是有更好的方法?请建议。

谢谢

如果您只想在内存中缓存搜索结果,则无需麻烦地将结果存储在持久数据库中。您是否需要对关系数据进行索引访问?如果答案是否定的,请不要将其存储在MySQL数据库中。

我知道phpbb(一个支持MySQL后端的开源web论坛)使用键值存储来支持它的搜索结果。如果论坛被配置为给你一个链接到特定的结果页面(在URL的查询字符串的搜索id哈希),那么该链接将是有效的一段时间,但最终被冲出缓存,就像你想要的。但是,如果您设置在MySQL上,那么实现完整的数据库抽象层可能是多余的。总之:

http://wiki.phpbb.com/Cache

您应该使用memcached或其他东西来存储结果数据,并且您可以轻松地在PHP中检索数据并对其进行排序。还有一些php专用的缓存框架可以最大限度地减少从解释器加载和卸载数据的成本:

https://en.wikipedia.org/wiki/List_of_PHP_accelerators