MST

星途 面试题库

面试题:MySQL中查询缓存机制的基本原理是什么

请阐述MySQL查询缓存机制在查询过程中的工作原理,包括缓存的触发条件、数据存储形式以及在什么情况下缓存会失效。
30.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 缓存触发条件

  • 完全相同查询:MySQL查询缓存只会对完全相同的查询语句进行缓存。这里的完全相同,不仅指SQL语句字符相同,还包括查询的数据库、用户权限、字符集等环境因素完全一致。例如,SELECT * FROM users WHERE age > 18SELECT * FROM users WHERE age >= 18 虽然很相似,但不是完全相同,不会命中缓存。
  • 非事务性表:对于使用事务性存储引擎(如InnoDB)的表,在事务未提交前,查询缓存不会生效。而对于非事务性存储引擎(如MyISAM),查询缓存可以正常工作。

2. 数据存储形式

  • 哈希表存储:MySQL查询缓存使用哈希表来存储缓存数据。哈希表的键是查询语句的哈希值,值则是查询结果以及相关的元数据,如查询结果的列信息、表信息等。当接收到一个查询请求时,MySQL会先计算该查询语句的哈希值,然后在哈希表中查找是否存在对应的缓存数据。

3. 缓存失效情况

  • 表数据变更:当表中的数据发生任何变化,如执行 INSERTUPDATEDELETE 操作,该表相关的所有查询缓存都会失效。这是因为数据改变后,之前的查询结果可能不再准确。例如,对 users 表执行 UPDATE users SET age = age + 1 后,所有涉及 users 表的查询缓存都需要被清除。
  • 结构变更:若表结构发生改变,如 ALTER TABLE 操作,同样会导致该表相关的查询缓存失效。比如对 users 表添加一个新列 email,之前的查询缓存就不再适用。
  • 服务器重启:MySQL服务器重启后,查询缓存中的所有数据都会丢失,因为缓存是基于内存的,重启会清空内存中的缓存数据。