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
是否会为子查询禁用缓存?
答案 0 :(得分:3)
它不仅适用于整个查询,子查询根本不会被缓存。
您可以通过发出命令
来检查是否遇到缓存SHOW STATUS LIKE 'QCache%';
您会在这些变量QCache_hits
和Qcache_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
是一列并抛出错误。