一、概述
在平常使用数据库中,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查询缓存优化示例详析
https://www.wanzijz.com/view/61340.html