如果从 MySQL 命令行执行查询,然后KILL
在它运行时对其进行编辑,查询及其部分结果*是否会在查询缓存中并可用于相同查询的后续运行?
为简单起见,假设这是一个SELECT
没有子查询的普通查询。
此页面上的排除列表涵盖查询不会被缓存的情况,例如查询表在执行之间更改,以及某些本质上不相同的操作,但我没有在任何地方看到中断或终止的查询。被杀死的查询一定不能被视为与运行完成的查询相同,但如果它满足所有其他缓存条件,它在被杀死之前就已经被缓存*,所以我想知道接下来会发生什么。
MySQL 5.6
*我在这里做了几个假设。
是和不是。
查询缓存不会看到,更不用说保留部分结果了。您引用的页面仅在谈论查询缓存。仅在生成完整结果后才会填充 QC。这极大地促进了相同查询的重复。(QC 对类似查询没有任何帮助。)
InnoDB 的 buffer_pool(以及 MyISAM 中的等价物)缓存从磁盘读取的任何块。在 killed 进程之前从磁盘读取的块可能仍在 RAM 中。这将为重复执行相同或相似的查询提供一些性能提升,无论是否被终止。