我正在阅读有关MySQL query cache ,我读这..
仅caching全部查询 – 意味着它不适用于子查询,内联视图,UNION的一部分。 这也是常见的误解。
联盟的部分是什么意思? 我在一个使用了很多UNION的网站上工作,我想他们正在被caching,但是我想确认一下。
谢谢!
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
当重新运行时,查询caching可以跳过执行并重新发送caching的结果,而在table1,table2,table3中没有发生变化。
“它不适用于UNION的部分”意味着如果应用程序中的另一个步骤运行此查询:
select 'nb1', count(*) from table1 group by col1
那么即使结果已经作为UNION查询的结果的一部分被caching,查询caching也无法识别出要利用它的优势。 它将执行它并将其结果作为完全独立的查询放入caching中。