我注意到,当我在我的 mysql 机器上连续执行多次查询时,执行时间在第一次执行后下降并发生显着变化(40/50%),并且没有激活查询缓存并且没有其他进程干扰。
我怀疑其中涉及一些“隐藏”缓存,例如临时表,特别是当查询涉及多个子查询,或者可能是一些磁盘 IO 缓存时,但我真的不明白。
由于有时我需要微调一些查询,所以我不知道如何处理这个问题。我通常做的是多次运行查询并摆脱峰值
我想知道是否有更好的解决方案...
我注意到,当我在我的 mysql 机器上连续执行多次查询时,执行时间在第一次执行后下降并发生显着变化(40/50%),并且没有激活查询缓存并且没有其他进程干扰。
我怀疑其中涉及一些“隐藏”缓存,例如临时表,特别是当查询涉及多个子查询,或者可能是一些磁盘 IO 缓存时,但我真的不明白。
由于有时我需要微调一些查询,所以我不知道如何处理这个问题。我通常做的是多次运行查询并摆脱峰值
我想知道是否有更好的解决方案...
操作系统使用未使用的内存作为缓存。为什么这是个问题?
编辑
要获取查询操作的不同部分所花费的时间,您可以设置分析
并在运行查询时
show profiles
和之后显示配置文件 。show profile for query <n>
请注意优化目标,如前所述:当您针对重复运行优化查询时,您将获得连续多次运行的查询的最佳结果(但您可能会为此使用查询缓存)。
通过重复查询,您可以“预热”操作系统磁盘缓存,因此磁盘寻道不再计入您的时间。当需要在繁忙的磁盘上进行多次查找操作时,这可能会使您的结果在实际场景中显着恶化。
旁注:您可能还想尝试“解释选择...”,它将告诉您有关已使用和可用索引的信息。在大多数情况下,这将帮助您确定要创建哪些附加索引或如何重写查询。