mysql 查询缓存小结

617 阅读2分钟

不建议开始mysql 查询缓存(query_cache)
mysql 如果开启了查询缓存, 会将sql 语句和结果集存储到缓存中, key是sql语句。
如果开启了QC, 查询在通过连接器之后, 会优先查询Qc, 如果存在相同的sql, 会直接返回结果。 如果没有命中缓存, 会走后续的正常查询流程。 mysql 中的Qc 有一个机制, 当某一个表被更新后 (insert ,update, alter table 等) 会清除掉所有的与该表相关的缓存。

所有如果一个表更新频率非常高, 比如订单表 。 如果开启了缓存, 那么qc可能会占用大量的资源,

根据MySQL官方的测试,QC的优劣分别是:

如果对一个表执行简单的查询,但每次查询都不一样的话,打开QC后,性能反而下降了13%左右。但通常实际业务中,通常不会只有这种请求,因此实际影响应该比这个小一些。

如果对一个只有一行数据的表进行查询,则可以提升238%,这个效果还是非常不错的。

注:QC严格要求2次SQL请求要完全一样,包括SQL语句,连接的数据库、协议版本、字符集等因素都会影响。

建议 : 更新频率比较高的表, 不建议使用查询缓存。 但针对于想对静态的表:比如系统配置表。 可以使用查询缓存。 mysql 提供了这种按需使用的功能, 我们需要将 query_cache_type 设置为demand。 这样所有的sql语句都不会使用查询缓存, 当有的sql语句需要使用查询缓存的 时候, 需要带上 sql_cache 关键字,例如: select sql_cache * from t

需要注意的是 , mysql 8.0 版本将 查询缓存这个功能整块删除了, 也就是说 从8.0之后的版本, 查询缓存这个功能就没有了。