“SQL_NO_CACHE”指令是否阻止查询使用缓存,或仅添加到缓存?

时间:2012-09-25 04:38:40

标签: mysql caching

手册指出“SQL_NO_CACHE”阻止查询添加到缓存。但它没有说明使用缓存,我可以看到。

我正在尝试对两个版本的查询进行基准测试,但它们已经在没有“SQL_NO_CACHE”的情况下运行。所以我不知道我的测试是否正在使用查询缓存。

“SQL_NO_CACHE”指令是否阻止查询使用缓存,或者只是添加缓存?

1 个答案:

答案 0 :(得分:2)

MySQL查询缓存是根据查询的完整文字文本编制索引的,因此功能上没有区别:即使忽略了该指令,带有SQL_NO_CACHE的查询结果也会存储在来自没有SQL_NO_CACHE的查询的不同缓存“槽”。 (实际上,只是在某处向查询添加空格,或者将“SELECT”更改为“select” - 例如 - 也会“破坏”查询缓存,使其再次运行.MySQL查询缓存并不是特别复杂。 )

话虽如此,通过使用SQL_NO_CACHE运行查询并观察QCACHE_QUERIES_IN_CACHE状态的快速测试确认SQL_NO_CACHE确实阻止变量存储在缓存中,并查看the source看起来似乎SQL_NO_CACHE的存在也会阻止MySQL检查缓存中的结果。