当前位置: 首页 > 知识库问答 >
问题:

navicat for mysql中,同一条select语句,为什么第一次执行慢,后面就快多了?

牛迪
2023-04-21

如题,1000w的数据,select * where name=xxxx,name有索引。第一次select耗时0.3s左右,后面都是0.05s左右,时间相差巨大。这是为什么?是因为mysql自带的缓存吗?我因为在测试索引对CRUD的影响,是否可以手动关闭mysql的缓存呢?另外mysql自带的缓存靠谱吗?能保证数据的一致性吗?
补充:
mysql版本8.0.32
navicat版本16.1.11
经百度查询mysql8是没有查询缓存的,但实际测试,第一遍运行sql的耗时就是比后面运行的时间长,这究竟是为什么?难道是navicat自带的缓存吗?

共有3个答案

丌官远
2023-04-21

怀疑可能是第一次连接的时候,时间花在TCP连接握手上了。

韶宏邈
2023-04-21

查询缓存是MySQL的一项功能,它可以缓存查询结果,以便在下一次相同的查询请求时更快地返回结果。但是,查询缓存只对相同的查询请求有效,并且在表中的数据发生更改时会自动失效;

也许Navicat 可能会缓存查询结果以提高性能

凌景辉
2023-04-21

第一次数据要进内存, 后面数据已经在内存中了就会快一些
不建议使用*:

  1. 读取不需要的列会增加CPU、IO、NET消耗
  2. 不能有效的利用覆盖索引
  3. 使用SELECT *容易在增加或者删除字段后出现程序BUG
 类似资料:
  • 问题内容: 我正在使用SELECT语句从表中获取数据,然后将其插入到另一个表中。但是,行“ stmt.executeQuery(query);” 从表中插入第一行然后退出。当我注释掉这一行时,while循环遍历所有行,将它们打印出来。stacktrace没有显示任何错误。为什么会这样呢? 问题答案: 您将重新使用循环最后一行中产生的那个。 这将关闭 。如文档中所述: 阿当对象将自动关闭生成它对象被

  • 问题内容: 假设我有一个看起来像这样的sql脚本: 基本上,脚本可以具有DML,DCL,DDL和匿名块。我希望能够拆分每个语句并分别执行它们,但是当然是为了使它们出现。 我考虑使用正则表达式,并且我相信逻辑必须是这样的: 1)如果字符串以create | alter | drop | declare开头,请获取从该字符串的开头到分号的所有内容,再以换行符开头,然后再加一个反斜杠(此处的关键是如果发

  • 问题内容: 我试图避免编写单独的SQL查询来实现以下情况: 我有一个称为值的表: 值: 我想检查表中是否存在某些数据,如果存在,则返回其ID,否则将其插入并返回其ID。 (非常)幼稚的方式是: 如果id不为null,请接受。如果id为null,则: 然后再次选择它以查看其ID或使用返回的ID。 我正在尝试使上述功能合而为一。我想我已经接近了,但我还没做到:到目前为止,我明白了这一点: 我正在尝试利

  • 我有一个对我来说很奇怪的问题。我实现了,将使用执行。问题是,它只执行一次。。。 下面是有用的代码(是一个枚举): 有趣的是,如果我用一些if-else语句替换这个开关,它工作得很好,这意味着这个Runnable按照我的要求每50毫秒执行一次。。! 下面是调度设置: 为什么用if-else语句每50ms调用一次Runnable,为什么用switch只调用一次?? 编辑:因为你问,这里是MenuEve

  • 我使用的是+++。 我得到了4个DELETE,只想要一个数据库请求,所以我用一个“;”连接了DELETE命令...但总是失败。 它会抛出以下错误: 但如果我将此SQL粘贴到PhpMyAdmin中,它总是成功的... 如果我在单个查询中编写它,它也会成功。 多谢帮忙!

  • 问题内容: 我需要初始化一个常量HashMap,并希望在一行语句中完成它。避免这样的事情: 类似于目标C: 看了这么多,我还没有找到任何显示如何做到这一点的例子。 问题答案: 您可以使用 Double Brace初始化 ,如下所示: 作为警告,请参阅Java的效率效率“ Double BraceInitialization”,了解它可能带来的性能影响。