我正在尝试对不同列上的不同查询进行一些基准测试,但 MySQL 不允许我这样做。在第一次执行查询后,我再也无法为该查询获得相同的执行时间。例如,如果查询第一次在 0.062 秒内执行,我永远无法在第二次、第三次等运行中获得相同的执行时间。它变为 0 秒或类似 0.015。
我已经阅读了许多关于禁用和清除 MySQL 查询缓存的帖子,但没有一篇对我有任何帮助。
无论我做什么,MySQL 似乎都坚持使用缓存结果。
我重新启动 MySQL Workbench,然后运行;
set global query_cache_type=0;
set global query_cache_size=0;
flush query cache;
reset query cache;
执行时间一直显示 0 秒。
只有我无法更改的服务器变量是“have_query_cache”。它的值为“是”,当我尝试将其设置为“否”时,Workbench 说它是只读的。
我也这样做;
set profiling=1;
run my select query
show profile for query 2;
分析结果表明:
'starting', '0.000077'
'checking permissions', '0.000007'
'Opening tables', '0.000016'
'init', '0.000035'
'System lock', '0.000009'
'optimizing', '0.000013'
'statistics', '0.000094'
'preparing', '0.000008'
'executing', '0.000002'
'Sending data', '0.000016'
'end', '0.000002'
'query end', '0.000003'
'closing tables', '0.000005'
'freeing items', '0.000139'
'cleaning up', '0.000009'
如果我没有错,这表明没有使用缓存对吗?但我仍然看到 0 秒。为执行时间。
编辑:我正在运行的查询是使用“SQL_NO_CACHE”的 SELECT 查询,如下所示:
SELECT SQL_NO_CACHE col1,now() from mytable where col2="some_value"
(我添加了 now() 函数来帮助我防止查询缓存)
Edit2:我正在使用 innoDB,MySQL 5.6.10
有人可以帮助我,因为我看不到这里发生了什么。
非常感谢!