美文网首页
查询缓存

查询缓存

作者: 咸鱼佬 | 来源:发表于2018-10-14 09:22 被阅读35次

概述

缓存机制简单地说就是缓存SQL 语句和查询结果,如果运行相同的sql 语句,服务器会直接从缓存中取到结果,而不需要再去解析执行sql语句。查询缓存会存储最新数据,而不会返回过期数据,当数据被修改后,在查询缓存中的任何相关数据都会清除,对于频繁更新的表,查询缓存是不适合的,而对于一些不经常改变数据且大量相同sql 查询的表,查询缓存会提高很大的性能

认识查询缓存

have_query_cache YES
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 1048576
query_cache_type OFF
query_cache_wlock_invalidate OFF

  1. have_query_cache 用来设置是否支持查询缓存区,yes 表示支持查询缓存区
  2. query_cache_limit 用来设置mysql可以缓存的最大结果集,大于此值得结果集不被缓存,该参数默认值是 1MB
  3. query_cache_min_res_unit 用来设置分配内存块的最小体积。每次给查询缓存结果分配的内存的大小,默认分配4096字节,如果此值比较小,那么回节省内存,但是这样会让系统频繁分配内存块
  4. query_cache_size 用来设置查询缓存使用的总内存字节数,必须是1024字节的倍数
  5. query_cache_type 用来设置是否启用查询缓存,,如果是OFF表示不进行缓存,如果设置为On 表示除了SQL_NO_CACHE 的查询外,缓存所用的结果,如果设置为DEMAND
  6. query_cache_wlock_invalidate 用来设置是否允许在其他连接处于lock状态时,使用缓存结果,默认是OFF,不会影响大部分应用。在默认情况下,一个查询中使用的表即使被Lock tables 命令锁住了,查询也能被缓存下来

查询缓存命中次数

show status like 'Qcache_hits'

监控和维护查询缓存

flush query cache
该命令用于整理查询缓存,以便更好地利用查询缓存的内存,这个命令不会从缓存中移除任何的查询结果
reset query cache
用于移除查询缓存中所有的查询结果

show status like 'Qcache%'

Qcache_free_blocks 1 缓存中空余的内存块
Qcache_free_memory 1029312 缓存中剩余的内存大小
Qcache_hits 2 缓存命中总次数
Qcache_inserts 2 被加入到缓存中的查询数目
Qcache_lowmem_prunes 0 因内存不足而被删除的查询数目
Qcache_not_cached 38 没有被缓存的查询数目
Qcache_queries_in_cache 2 在缓存中已经注册的查询数目
Qcache_total_blocks 6 缓存中总的内存块数目

提高缓存命中率

  1. 客户端的字符集和服务器端的字符集一致,即使客户端没有出现乱码的情况,查询数据可能因为字符集不同而没有被数据库缓存起来
  2. 客户端和服务器采用一致的SQL语句,虽然对于数据库而言,SQL是不区分大小写的,但是对于缓存而已会被当作不一样的查询语句
  3. 查询缓存不会存储不确定的查询,比如包含不确定函数(NOW()),同样的,current_user() connection_id() 这些由不同用户执行,将会产生不同结果的查询也不会被缓存,而且查询缓存也不会缓存用户自定义函数,自定义变量,临时表的查询
  4. 通过分区表提高命中率

缓存的弊端:

  1. mysql 服务器在进行查询之前会先检查查询缓存是否存在相同的查询条目
  2. mysql服务器在进行查询操作时,如果缓存中没有相同的查询条目,将会将查询结果缓存,这个过程也需要系统资源
  3. 如果数据库表发生增加操作,mysql 会查询对应的缓存中失效的查询结果,这样也需要系统资源

相关文章

  • MySQL学习——查询缓存

    MySQL查询缓存简介 MySQL查询缓存是MySQL将查询返回的完整结果保存在缓存中。当查询命中该缓存,MySQ...

  • Mysql - 一条sql语句是如何执行的

    1. 连接器 长连接保持通信 2. 查询缓存 每次查询都会缓存查询结果,相同语句再次查询时直接返回缓存结果,缓存结...

  • Yii2缓存组件之数据库查询缓存

    查询缓存 查询缓存是一个建立在数据缓存之上的特殊缓存特性。它用于缓存数据库查询的结果。(PS需配置好缓存配置) 查...

  • 查询缓存

    查询缓存原理 mysql查询缓存保存完整的查询结果,当查询命中缓存时,立刻返回结果,跳过了解析,优化和执行阶段。 ...

  • MySQL数据库性能优化

    MySQL架构 查询缓存 查询缓存(Query Cache)原理: 缓存SELECT操作或预处理查询的结果集和SQ...

  • 5. 查询缓存和索引

    1. 查询缓存 查询缓存( Query Cache )原理缓存SELECT操作或预处理查询的结果集和SQL语句,...

  • Mysql 查询优化

    如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。缓存在第一次查询后,MySQL便将查询语句以及...

  • (8)MySQL性能优化的最佳21条经验(未完待续)

    1.为查询缓存优化你的查询 某些查询语句会让MySQL不使用缓存。 MySQL的查询缓存对这个函数不起作用。像...

  • Redis缓存击穿、穿透、雪崩解决方案

    1、缓存处理流程 接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从DB中查询...

  • 集成缓存框架入门

    集成caffeineCache缓存功能 @Cacheable:缓存数据,一般用在查询方法上。将查询到的数据进行缓存...

网友评论

      本文标题:查询缓存

      本文链接:https://www.haomeiwen.com/subject/xmhzaftx.html