我想多次运行相同的查询,以查看它在没有缓存内存的情况下需要多少时间。
运行 RESET QUERY CACHE 命令似乎不起作用,因为即使在缓存重置后,查询在第二次运行时也需要非常短的时间。
我错过了什么?
您的操作系统会缓存大量数据。然后,数据库管理系统本身也会缓存大量数据。查询缓存仅保存先前查询的输出。查询输出所创建的数据可能全部在RAM中。如果您想在没有任何缓存的情况下运行查询,则可以在执行之间关闭主机或运行一个从磁盘读取足够数据以覆盖所有缓存的查询。但这不会是衡量查询在实际环境中表现的真实措施。
查询受到两个“缓存”的影响。 查询缓存(Query Cache)
和缓冲池(Buffer Cache,InnoDB使用)或关键缓存(MyISAM使用)
。 由于它可以缓存查询结果,因此查询缓存
的影响远大于缓冲池
。 这意味着相同的查询将不会再次执行。
为了避免使用查询缓存
,最好使用SQL_NO_CACHE
,并可以在my.cnf
中禁用查询缓存
并重新启动mysql。
缓冲池
由mysql管理以将数据缓存在内存中,从而使查询不必从磁盘(SSD或HDD)中读取数据。 如果您想清除它,请尝试将'缓冲池'设置得足够小,并使用其他数据填充它(使用SELECT
)。
https://dev.mysql.com/doc/refman/5.5/en/query-cache-in-select.html
请记住,MySQL 的后续版本中已经删除了查询缓存。RESET QUERY CACHE
,FLUSH TABLES
,SELECT SQL_NO_CACHE...
等方法,但都没有起作用。然后,我将此视图中查询的底层(单个)表的存储引擎从InnoDB更改为MyISAM,它隐式地按预期工作了!无需跳过任何障碍来清除或防止缓存!