首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL刷新查询缓存

问MySQL刷新查询缓存
EN

Stack Overflow用户
提问于 2013-03-07 17:54:12
回答 2查看 9.2K关注 0票数 5

我有一个缓慢的数据库查询,第一次运行时运行18秒,后续运行时运行4秒。我正在尝试优化它的“冷启动”执行时间。但不能连续复制。

select SQL_NO_CACHE指令没有帮助。

下面的任何命令都不会使它再次运行18秒:

代码语言:javascript
复制
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;

即使是数据库重启也不会让它再次运行很长时间。

还有没有其他命令可以刷新缓存?

表引擎为InnoDB。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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”,这将不会受到影响。

  • 除了您正在尝试的内容之外,您还可以尝试避免这些缓存。
  • MySQL重新启动必须用于'MySQL缓存‘(Innodb缓冲池),没有其他方法。
  • set global key_buffer_size=0;设置global query_cache_type=0;
  • set
  • set global
  • key_buffer_size=0:

post可以帮助您

票数 9
EN

Stack Overflow用户

发布于 2013-03-07 17:58:41

我通常会在查询中添加一个用户定义的变量,这样它就会跳过查询缓存。不过,我不确定你是否可以用这种方式来模拟冷启动。

代码语言:javascript
复制
SELECT a.* 
FROM a, (SELECT @a:=NULL) as foo;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15268005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档