我有一个缓慢的数据库查询,第一次运行时运行18秒,后续运行时运行4秒。我正在尝试优化它的“冷启动”执行时间。但不能连续复制。
select SQL_NO_CACHE指令没有帮助。
下面的任何命令都不会使它再次运行18秒:
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;即使是数据库重启也不会让它再次运行很长时间。
还有没有其他命令可以刷新缓存?
表引擎为InnoDB。
发布于 2015-05-05 14:19:56
让我解释一下为什么它无济于事。
Your Requirement:在这里,您试图再次运行相同的查询,但您希望它在第一次运行时只通过清除缓存来执行。
当查询运行时,有多种类型的缓存出现在画面中。‘'Query’我们所说的最常见的缓存,然后是MySQL缓存(例如InnoDB Buffer Pool ),table_cache (在MySQL级,也在Innodb级),OS缓存,硬件缓存。
select SQL_NO_CACHE :这将阻止运行查询来保存任何“查询缓存”,这意味着如果您将再次运行相同的查询,将不会有任何“查询缓存”,但其他缓存将在图片中。
FLUSH QUERY CACHE :这只是对‘查询缓存’进行碎片整理,以便更好地利用它的内存
RESET QUERY CACHE :从“查询缓存”中删除所有查询结果,如果您在所有以前的查询中使用“SQL_NO_CACHE”,这将不会受到影响。
post可以帮助您
发布于 2013-03-07 17:58:41
我通常会在查询中添加一个用户定义的变量,这样它就会跳过查询缓存。不过,我不确定你是否可以用这种方式来模拟冷启动。
SELECT a.*
FROM a, (SELECT @a:=NULL) as foo;https://stackoverflow.com/questions/15268005
复制相似问题