MST

星途 面试题库

面试题:MySQL查询缓存机制基础

请阐述MySQL查询缓存的基本工作原理,在什么情况下查询缓存会命中?又在哪些场景下会失效?
27.4万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

MySQL查询缓存基本工作原理

  1. 缓存存储结构:MySQL查询缓存将查询语句(SQL文本)作为键,查询结果作为值,存储在一个哈希表中。当执行一条SELECT查询时,MySQL会先计算该查询语句的哈希值,然后在哈希表中查找是否存在对应的缓存结果。
  2. 命中流程:如果哈希表中存在与该查询语句哈希值匹配的项,且缓存的结果没有过期,MySQL直接从缓存中取出结果返回给客户端,而无需再次执行查询语句去访问数据库。

查询缓存命中的情况

  1. 查询语句完全相同:包括SQL语句的字符、空格、大小写等都完全一致。例如,SELECT * FROM users WHERE id = 1;select * from users where id = 1;在MySQL查询缓存中被视为不同的查询,因为大小写不同。
  2. 数据库、表状态相同:相关的数据库、表没有发生结构变化(如ALTER操作),且数据没有修改(如INSERT、UPDATE、DELETE操作)。如果查询涉及的表结构或数据没有变化,且查询语句相同,缓存就可能命中。

查询缓存失效的场景

  1. 数据修改操作:对任何表执行INSERT、UPDATE、DELETE操作,MySQL会认为该表的数据发生了变化,所有涉及该表的查询缓存都会失效。即使只修改了表中的一行数据,所有与该表有关的查询缓存都会被清除。
  2. 表结构修改:当执行ALTER TABLE、CREATE TABLE、DROP TABLE等表结构变更操作时,不仅该表的查询缓存会失效,而且所有关联到该数据库的查询缓存也可能失效,因为数据库的元数据发生了改变。
  3. 系统变量修改:一些影响查询结果的系统变量(如sql_mode)发生变化时,查询缓存会失效。因为不同的系统变量设置可能导致查询结果不同。
  4. 使用不确定函数:如果查询中包含不确定函数,如NOW()RAND()等,每次执行查询可能得到不同结果,所以查询缓存不会命中,且这类查询结果不会被缓存。