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

时间:2011-10-19 01:55:50

标签: php mysql

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

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

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

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

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

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

我知道phpbb(一个支持MySQL后端的开源网络论坛)使用键值存储来支持其搜索结果。如果论坛配置为为您提供指向特定结果页面的链接(在URL的查询字符串中使用搜索ID哈希),那么该链接将暂时有效,但最终会从缓存中刷新,就像您想要的那样。如果你在MySQL上设置,那么实现完整的数据库抽象层可能有点过分。无论如何:

http://wiki.phpbb.com/Cache

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

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