【发布时间】:2012-08-20 17:53:15
【问题描述】:
我读过 MySQL 可以缓存 UNION's,但同时我也读过..
在查询开始时避免注释(和空格)——查询缓存可以 检查是否可以缓存查询的简单优化。如我所说 只有 SELECT 查询被缓存——所以它查看第一个字母 查询,如果它是“S”,它会在缓存中进行查询查找,如果不是—— 跳过它。
来源:http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
话虽如此,既然 UNION 以括号开头,它们是如何缓存的?
根据mysql.com:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
第一个字母不是“S”,所以会被跳过!?
我也看到你可以做这样的事情..
SELECT * FROM (
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION ALL
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
) AS u
但它会是sub-select,因此,根据该页面,也不会被缓存。
那么UNIONs 是如何被缓存的呢?
【问题讨论】:
标签: mysql caching union query-cache