1

该手册指出“SQL_NO_CACHE”会阻止将查询添加到缓存中。但我可以看到,它没有说明使用缓存的任何内容。

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

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

4

1 回答 1

3

MySQL 查询缓存是基于查询的完整文本索引的,因此在功能上没有区别:即使忽略该指令,查询的结果SQL_NO_CACHE也会存储在与查询不同的缓存“槽”中没有SQL_NO_CACHE。(事实上​​,简单地在某处的查询中添加一个空格,或者将“SELECT”更改为“select”——例如——也会“破坏”查询缓存,使其再次运行。MySQL 查询缓存并不是特别复杂。 )

话虽如此,通过运行查询SQL_NO_CACHE并观察QCACHE_QUERIES_IN_CACHE状态的快速测试确认SQL_NO_CACHE确实阻止了变量存储在缓存中,并且查看源代码看起来好像SQL_NO_CACHE也会阻止 MySQL 检查缓存为结果。

于 2012-09-25T05:33:23.623 回答