MySQL 查询缓存 - 存储了 UNION 调用的哪部分?

MySQL 查询缓存 - 存储了 UNION 调用的哪部分?

我正在阅读有关 mysql 的文章query cache,然后我读到了这个。

仅缓存完整查询 – 这意味着它不适用于子选择、内联视图、UNION 的部分。这也是常见的误解。

“UNION 的部分”是什么意思?我正在开发一个使用大量 UNION 的网站,我认为它们正在被缓存,但我想确认一下。

谢谢!

答案1

UNION组合子查询,并且这些子查询本身不被query cache机制考虑,只考虑完整查询及其最终结果。

举例来说,假设某个应用程序频繁运行以下查询:

select 'nb1', count(*) from table1 group by col1
UNION
select 'nb2', count(*) from table2 group by col2
UNION
select 'nb3', count(*) from table3 group BY col3

当重新运行此操作并且表 1、表 2、表 3 中没有发生任何变化时,查询缓存可以跳过执行并重新发送缓存的结果。

“这对欧盟的部分地区不起作用”意味着如果应用程序中的另一个步骤运行此查询:

 select 'nb1', count(*) from table1 group by col1

那么,即使结果以某种方式已经作为 UNION 查询结果的一部分被缓存,查询缓存也无法识别并利用它。它将执行它并将其结果作为完全独立的查询放入缓存中。

相关内容