MySQL查询缓存优化示例详析

 更新时间:2022年10月26日 11:48:13   作者:Happy_Future  
MySQL的优化指的是一个很大的系统,面试的时候我之前是从sql的语句优化方面去说的,这种优化也有作用,不过是从逻辑方面去优化,下面这篇文章主要给大家介绍了关于MySQL查询缓存优化的相关资料,需要的朋友可以参考下

一、概述

在日常使用数据库中,80%的数据请求都是查询,而余下的20%是更新或者增加数据。如何提升查询性能,便是提高数据库处理能力的关键。

二、查询优化内容

1、查询缓存的原理

查询的路线图:

缓存SELECT操作或预处理查询的结果集和SQL语句,当有新的SELECT语句或预处理查询语句请求,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写。

2、查询缓存的优缺点

优点

不需要对SQL语句做任何解析和执行,当然语法解析必须通过在先,直接从Query Cache中获得查询结果,提高查询性能

缺点

查询缓存的判断规则,不够智能,也即提高了查询缓存的使用门槛,降低效率查询缓存的使用,会增加检查和清理Query Cache中记录集的开销

3、不能应用查询缓存的内容

  • 查询语句中加了SQL_NO_CACHE参数
  • 查询语句中含有获得值的函数,包含:自定义函数,如:NOW() ,CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ()等
  • 对系统数据库的查询:mysql、information_schema 查询语句中使用SESSION级别变量或存储过程中的局部变量
  • 查询语句中使用了LOCK IN SHARE MODE、FOR UPDATE的语句,查询语句中类似SELECT …INTO 导出数据的语句
  • 对临时表的查询操作
  • 存在警告信息的查询语句
  • 不涉及任何表或视图的查询语句
  • 某用户只有列级别权限的查询语句
  • 事务隔离级别为Serializable时,所有查询语句都不能缓存

4、查询缓存相关的服务器变量

  • query_cache_min_res_unit:查询缓存中内存块的最小分配单位,默认4k,较小值会减少浪费,但会导致更频繁的内存分配操作,较大值会带来浪费,会导致碎片过多,内存不足
  • query_cache_limit:单个查询结果能缓存的最大值,单位字节,默认为1M,对于查询结果过大而无法缓存的语句,建议使用SQL_NO_CACHE
  • query_cache_size:查询缓存总共可用的内存空间;单位字节,必须是1024的整数倍,最小值40KB,低于此值有警报
  • query_cache_wlock_invalidate:如果某表被其它的会话锁定,是否仍然可以从查询缓存中返回结果,默认值为OFF,表示可以在表被其它会话锁定的场景中继续从缓存返回数据;ON则表示不允许
  • query_cache_type:是否开启缓存功能,取值为ON, OFF, DEMAND

5、SELECT语句的缓存控制

  • SQL_CACHE:显式指定存储查询结果于缓存之中
  • SQL_NO_CACHE:显式查询结果不予缓存
  • query_cache_type参数变量
  • query_cache_type的值为OFF或0时,查询缓存功能关闭
  • query_cache_type的值为ON或1时,查询缓存功能打开,SELECT的结果符合缓存条件即会缓存,否则,不予缓存,显式指定SQL_NO_CACHE,不予缓存,此为默认值
  • query_cache_type的值为DEMAND或2时,查询缓存功能按需进行,显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存

6、查询缓存相关的状态变量

show gloable status like 'Qcache%' ;

7、查询的优化的检查路线

8、命中率和内存使用率估算

查询缓存中内存块的最小分配单位query_cache_min_res_unit :

(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

查询缓存命中率 :

Qcache_hits / ( Qcache_hits + Qcache_inserts ) * 100%

查询缓存内存使用率:

(query_cache_size – qcache_free_memory) / query_cache_size * 100%

9、版本差异

在早期版本mysql均支持缓存,但是随着redis等内存型高性能的缓存技术兴起,mysql已经抛弃自己的缓存功能,mysql8.0以后不再支持缓存功能。

三、总结

MYSQL的缓存优化在早期版本可以起到一定的优化作用,最新的版本不再支持,缓存的功能而由其他的缓存服务来承担。

到此这篇关于MySQL查询缓存优化的文章就介绍到这了,更多相关MySQL查询缓存优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql和文件系统的关联详情

    Mysql和文件系统的关联详情

    这篇文章主要介绍了Mysql和文件系统的关联详情,Mysql常用的存储引擎如InnoDB、MyISAM采用的是文件存储,自然和文件系统挂钩,那么Mysql都有哪些地方用到了文件系统呢,下面我们一起进入文章学习详细内容吧
    2022-09-09
  • MySQL5.7.17安装及配置图文教程

    MySQL5.7.17安装及配置图文教程

    这篇文章主要为大家详细介绍了MySQL5.7.17安装及配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • MySQL百万级数据量分页查询方法及其优化建议

    MySQL百万级数据量分页查询方法及其优化建议

    这篇文章主要介绍了MySQL百万级数据量分页查询方法及其优化建议,帮助大家更好的处理MySQL数据库,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL 删除大表的性能问题解决方案

    MySQL 删除大表的性能问题解决方案

    MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,本为将提供详细的解决方案,需要了解的朋友可以参考下
    2012-11-11
  • SQL JOIN 子句合并多个表中相关行全面指南

    SQL JOIN 子句合并多个表中相关行全面指南

    这篇文章主要为大家介绍了SQL JOIN 子句合并多个表中相关行全面指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • mysql函数IFNULL使用的及注意事项说明

    mysql函数IFNULL使用的及注意事项说明

    这篇文章主要介绍了mysql函数IFNULL使用的及注意事项说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 深入理解MySQL事务的4种隔离级别

    深入理解MySQL事务的4种隔离级别

    本文主要介绍了MySQL事务的4种隔离级别,事务的4种隔离级别分别是读未提交,读已提交,可重复读和串行化,具有一定的参考价值,感兴趣的可以了解一下
    2022-04-04
  • MySQL的InnoDB引擎入门学习教程

    MySQL的InnoDB引擎入门学习教程

    这篇文章主要介绍了MySQL的InnoDB引擎入门学习教程,对InnoDB的存储结构有一个较好的总结,需要的朋友可以参考下
    2015-11-11
  • mysql自动插入百万模拟数据的操作代码

    mysql自动插入百万模拟数据的操作代码

    这篇文章主要介绍了mysql自动插入百万模拟数据的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 你还在 Select * 吗?

    你还在 Select * 吗?

    这篇文章主要介绍了MySql Select ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论