MySQL优化之查询缓存(mysql8官方已经废弃这个功能)
对于缓存,一般人想到的是 redis、memcache 这些内存型的缓存。
但是实际上 mysql 也提供了缓存,mysql 里面的缓存是查询缓存,可以把我们查询过的语句缓存下来,下一次查询的时候有可能就直接从缓存返回(缓存命中)。
当然使用 mysql 缓存也不是没有坏处,mysql 多了个管理缓存的任务,需要写入缓存,然后如果判断里面的缓存已经过期,又要从里面删除缓存。
查看查询缓存情况:
mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启)+------------------------------+----------+| Variable_name | Value |+------------------------------+----------+| have_query_cache | YES || query_cache_limit | 1048576 || query_cache_min_res_unit | 4096 || query_cache_size | 20971520 || query_cache_type | ON || query_cache_wlock_invalidate | OFF |+------------------------------+----------+
如果不是ON,修改配置文件以开启查询缓存:
> vi /etc/my.cnf[mysqld]中添加:query_cache_size = 20Mquery_cache_type = ON
重启mysql服务:
> service mysql restart
查看缓存使用情况:
mysql> show status like 'qcache%'; +-------------------------+----------+| Variable_name | Value |+-------------------------+----------+| Qcache_free_blocks | 83 || Qcache_free_memory | 19811040 || Qcache_hits | 3108196 || Qcache_inserts | 757254 || Qcache_lowmem_prunes | 20720 || Qcache_not_cached | 47219 || Qcache_queries_in_cache | 47 || Qcache_total_blocks | 276 |+-------------------------+----------+
其中各个参数的意义如下:
- Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。
- Qcache_free_memory:缓存中的空闲内存。
- Qcache_hits:每次查询在缓存中命中时就增大
- Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。
- Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个 数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)
- Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。
- Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。
- Qcache_total_blocks:缓存中块的数量。
对于某些不想使用缓存的语句,可以这样使用:
select SQL_NO_CACHE count(*) from users where email = 'hello';
MySQL优化之查询缓存(mysql8官方已经废弃这个功能)相关推荐
- mysql 开发进阶篇系列 23 应用层优化与查询缓存
一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据 ...
- 【MySQL高级】查询缓存、合并表、分区表
[1] 查询缓存 MySQL的缓存机制简单地说就是缓存SQL语句和查询的结果,如果运行相同的SQL语句,服务器会直接从缓存中取到结果,而不需要再去解析和执行SQL语句. 查询缓存会存储最新数据 ...
- mysql query cache 查询缓存
查看本博文,并进行验证(验证结果与博文一致): https://blog.csdn.net/carmazhao/article/details/7088530 mysql默认是开启查询缓存的. 设置查 ...
- mysql 优化子查询_MySQL子查询的优化
一.MySQL子查询的位置当一个查询是另一个查询的子部分是,称之为子查询(查询语句中嵌套含有查询语句).子查询也是使用频率比较高的一种查询类型.因此,优化 一.MySQL子查询的位置 当一个查询是另一 ...
- MySQL优化union查询
除非确实需要服务器消除重复的行,否则一定要使用union all,因为没有all关键字,MySQL会在查询的时候给临时表加上distinct的关键字,这个操作的代价很高.
- mysql优化模糊查询_MySQL的LIKE模糊查询优化
%xxx%这种方式对于数据量少的时候,我们倒可以随意用,但是数据量大的时候,我们就体验到了查询性能的问题,像老化的车子艰难趴着坡一样,并且这种方式并未使用到索引,而是全表扫描 mysql 高效模糊查询 ...
- MySQL优化关联查询
①确保on或者using自居中的列上有索引,在创建索引的时候就要考虑到关联的顺序. ②确保任何的group by和order by中的表达式只涉及到一个表中的列,这样MySQL才有可能使用索引来优化这 ...
- MySQL优化之——查询
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46580589 MySQL中select的基本语法形式 select 属性列表 fr ...
- mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
本文实例讲述了php基于SQLite实现的分页功能.分享给大家供大家参考,具体如下: 这里操作数据库文件使用的是前面文章<PHP基于PDO实现的SQLite操作类[包含增删改查及事务等操作]&g ...
最新文章
- 手机安装失败java. io_Android java.io.FileNotFoundException:*** (Permission denied)
- posix_kill 信号
- 你必须拥有的Python调试神器
- 【已解决】tomcat报严重: Socket accept failed
- 中文只占一个字符_一文搞懂字符和字节的含义
- jQuery相当于对 javascript二次开发,所以基于 jQuery实现的各种插件直接调用即可...
- swift之Mac中NSView视图里的截图【ScrollView中的内容截图】
- Activity基础
- java supplier_现代化的 Java (二十一)——宏和生成宏
- 同步PC和MAC OS X文件夹--arrsync-0.4.1
- 二路归并排序 代码实例
- Zabbix 5.0 监控 SSH 登录
- Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
- java rsa 私钥解密_Java RSA 加密解密中 密钥保存并读取,数据加密解密并保存读取 问题...
- CentOS配置静态IP
- IAR工程适配GD32芯片
- [ZT]Grub4dos for WinPE 启动菜单
- 合伙企业怎么报所得税
- 巴比特观察丨CryptoPunks再次爆火,幕后推手找到了!
- 木马是如何穿过防火墙的