该手册指出“SQL_NO_CACHE”会阻止将查询添加到缓存中。但我可以看到,它没有说明使用缓存的任何内容。
我正在尝试对查询的两个版本进行基准测试,但它们已经在没有“SQL_NO_CACHE”的情况下运行。所以我不知道我的测试是否使用了查询缓存。
“SQL_NO_CACHE”指令是否阻止查询使用缓存,或者只是阻止查询?
MySQL 查询缓存是基于查询的完整文本索引的,因此在功能上没有区别:即使忽略该指令,查询的结果SQL_NO_CACHE
也会存储在与查询不同的缓存“槽”中没有SQL_NO_CACHE
。(事实上,简单地在某处的查询中添加一个空格,或者将“SELECT”更改为“select”——例如——也会“破坏”查询缓存,使其再次运行。MySQL 查询缓存并不是特别复杂。 )
话虽如此,通过运行查询SQL_NO_CACHE
并观察QCACHE_QUERIES_IN_CACHE
状态的快速测试确认SQL_NO_CACHE
确实阻止了变量存储在缓存中,并且查看源代码看起来好像SQL_NO_CACHE
也会阻止 MySQL 检查缓存为结果。