我可以告诉 MySQL 缓存什么吗?

kol*_*nep 3 mysql cache query-cache

很直接的问题:

假设我有一个我知道经常使用的特定查询,我可以告诉 MySQL 始终“自动”缓存它吗……即,一旦缓存的查询结果被刷新,mysqld立即再次运行该查询,以便为缓存数据做好准备下一个用户?

或者反过来:我可以告诉 MySQL 不缓存特定查询吗?其他缓存选项呢,不一定与查询相关?

我在网上搜索了这个,但找不到任何相关的东西。

Rol*_*DBA 5

MySQL 文档有SQL_NO_CACHE选项:

可以在 SELECT 语句中指定两个与查询缓存相关的选项:

SQL_CACHE

如果查询结果是可缓存的,并且 query_cache_type 系统变量的值为 ON 或 DEMAND,则会缓存查询结果。

SQL_NO_CACHE

服务器不使用查询缓存。它既不检查查询缓存以查看结果是否已经缓存,也不缓存查询结果。(由于解析器的限制,空格字符必须在 SQL_NO_CACHE 关键字之前和之后;非空格如换行符会导致服务器检查查询缓存以查看结果是否已被缓存。)

例子:

SELECT SQL_CACHE id, name FROM customer;
SELECT SQL_NO_CACHE id, name FROM customer;
Run Code Online (Sandbox Code Playgroud)

您可以设置SQL_NO_CACHE通过设置默认为您的会话query_cache_type的

SET query_cache_type = 'DEMAND';
Run Code Online (Sandbox Code Playgroud)

或者

SET query_cache_type = 2;
Run Code Online (Sandbox Code Playgroud)

之后,你必须说SELECT SQL_CACHE让它缓存SELECT