【问题标题】:MySQL Query Cache vs Custom Caching FunctionMySQL 查询缓存与自定义缓存功能
【发布时间】:2016-03-01 16:03:56
【问题描述】:

我遇到了一些问题,重复查询会减慢 HTML 表的呈现速度(在 while 循环中非常相似的选择查询)。所以我创建了一些简单的缓存函数(php):

  • check_cache()
  • write_cache()
  • return_cache()

这些函数可以防止服务器向数据库询问任何内容。 这大大加快了速度!

后来我读到 MySQL 缓存了 SELECT 语句:

查询缓存存储 SELECT 语句的文本以及发送到客户端的相应结果。如果稍后收到相同的语句,则服务器从查询缓存中检索结果,而不是再次解析和执行该语句。

如果 MySQL 已经这样做了,为什么这会提高性能?

【问题讨论】:

  • 这可能更像是 MySQL 可以缓存 SELECT 查询的情况,如果它被配置为这样做的话;您的查询缓存限制可能太低,由于查询的编写方式,它可能无法使用缓存......等等。 Memcached 或 Redis 可能也值得一看。
  • @CD001 好的,如果 MySQL 按预期工作,这些函数对性能没有影响吗? (我宁愿这种事情在内部处理)
  • 理论上...但是您的 PHP 脚本仍然使用 MySQL 缓存与数据库服务器联系,因此如果那里存在瓶颈(或负载非常重),您仍然可能遇到问题。如果您的系统依赖于文件缓存,那么您正在将瓶颈从数据库服务器转移到文件系统......一般来说,文件系统读取比数据库读取慢(即使数据库使用文件系统进行存储)......但并非总是如此:)使用 Memcached 或 Redis 之类的东西,结果存储在系统内存中 - 检索速度非常快。
  • @CD001 我认为这解释了它:query_cache_size 0 doh!我的本地服务器设置为16777216,这可能是我感到困惑的原因,这就是我要归咎于它的原因,总有一天我会停止在这个网站上看起来很愚蠢;)

标签: php mysql caching


【解决方案1】:

可能的问题

1) 如果您的应用程序频繁更新表,那么查询缓存将不断被清除,您将不会从中获得任何好处。

2)分区表不支持查询缓存。

3)查询缓存在您有多个 mysqld 服务器更新相同 MyISAM 表的环境中不起作用。

4) SELECT 语句应该相同。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多