我有大约10个表,每行约10,000行需要经常拉动。
例如,国家列表,世界上所有学校的名单等。
PHP不能将这些东西保存在内存中(据我所知)所以我每次都要查询服务器的SELECT * FROM TABLE。我应该在这里使用memcached吗?起初虽然它绝对是肯定的,但是第二个想法,不会mysql已经为我缓存了,这几乎是多余的吗?
我对mysql如何缓存数据(或者甚至是否缓存整个表)没有太多了解。
答案 0 :(得分:1)
我建议阅读MySQL查询缓存:
答案 1 :(得分:1)
您可以使用MySQL查询缓存,但之后您仍在使用数据库资源来建立连接并执行查询。如果您的网页相对静态,则另一个选项是opcode caching。但是我认为memcached是最灵活的解决方案。例如,如果您有一个需要从应用程序中的各个代码点访问的国家/地区列表,您可以从持久存储(mysql)中提取数据,并将它们存储到memcached中。然后,数据可用于任何业务需求的应用程序的任何部分(包括批处理和cronjobs)。
答案 2 :(得分:0)
你肯定需要一些类型的缓存;数据库内部和周围的缓存层的效率远低于memcached可以提供的效率。
那就是说,如果你得出的结论是正确的东西是缓存查询本身,而不是根据查询缓存你正在生成的内容,我想你会得出结论 - 需要更多分析。
在输出生成期间使用了除这些查询内容之外的哪些数据?页面缓存或页面片段缓存(或前面的缓存反向代理)是否更有意义?是否真的有必要“经常”运行这些查询?底层数据的变化频率如何?发生这种情况时,您是否有任何通知事件?
此外,没有SELECT *
子句的WHERE
查询是“代码味道”(表示某些事情可能正在以错误的方式完成),特别是如果不是所有数据被直接显示到用户。