SQL_NO_CACHE是否适用于整个查询,包括子查询?

时间:2014-08-01 13:37:36

标签: mysql

执行SQL_NO_CACHE查询时,

SELECT可用于禁用MySQL的缓存,如下所示: -

SELECT SQL_NO_CACHE * FROM tblA

我想知道如果我还需要为子查询指定,是否执行包含子查询的查询,例如: -

SELECT SQL_NO_CACHE
     a.*,
     (SELECT col1 FROM tblB WHERE id=1)
FROM tblA a

是否会为子查询禁用缓存?

2 个答案:

答案 0 :(得分:3)

它不仅适用于整个查询,子查询根本不会被缓存。

您可以通过发出命令

来检查是否遇到缓存
SHOW STATUS LIKE 'QCache%';

您会在这些变量QCache_hitsQcache_inserts中看到。当名称显示插入查询结果时,后者会增加,第一个会告诉您,如果使用了select缓存,则后者会增加。

从缓存中读取结果的查询必须与将结果集插入缓存的查询完全相同。它甚至是区分大小写的。

 SELECT foo FROM bar;

不同
 SELECt foo FROM bar;

答案 1 :(得分:0)

它必须适用于整个查询,因为如果您尝试运行: -

SELECT SQL_NO_CACHE
     a.*,
     (SELECT SQL_NO_CACHE col1 FROM tblB WHERE id=1)
FROM tblA a

它认为SQL_NO_CACHE是一列并抛出错误。