性能调优基本知识

本文探讨了MySQL查询优化器的工作原理,包括如何选择最优执行计划,以及在处理查询时的优化步骤。同时,文章强调了索引的重要性,提出了何时创建和避免创建索引的建议,并分享了提高ORDER BY操作速度的策略。通过对统计信息的分析和利用,以及合理设置系统参数,可以显著提升数据库性能。
摘要由CSDN通过智能技术生成

Mysql Query Optimizer

1、mysql 中有专门负责优化select语句的优化器模块,主要功能:通过计算分析中收集到的统计信息,为客户端请求的query提供它认为最有的执行计划(它认为最优的数据检索方式,但不一定是DBA认为是最优的,这部分最耗费时间)。
2、当客户端向mysql请求一条query,命令解析器模块完成请求分类,区别出是select并转发给Mysql Query Optimizer时,Mysql Query Optimizer首先对整条query进行优化,处理掉一些常量表达式的预算,直接换算成常量值。并对query中查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析query中的hint信息(如果有),看显示hint信息是否可以完全确定该query的执行计划。如果没有hint或hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据query进行相应的计算分析,然后得出最后的执行计划。

mysql常见瓶颈

CPU: cpu在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候
IO : 磁盘IO发生在装入数据远大于内存容量的时候
服务器硬件性能瓶颈:top ,free ,iostat 和vmstat 查看系统性能状况

explain工具的使用

请看另一篇文章:explain查看和分析执行计划

索引方面

哪些情况下需要创建索引?
1、主键自动建立唯一索引
2、频繁作为查询条件的字段应该创建索引
3、查询中与其他表关联的字段,外键关系建立索引
4、频繁更新的字段不适合创建索引,因为每次更新不仅更新记录,还要去更新和调整索引
5、where条件里用不到的字段不适合创建索引
6、单键、组合索引的选择(在高并发下倾向创建组合索引)
7、查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
8、查询中统计和分组的字段要建索引

哪些情况下不要建索引?
1、表记录太少
2、经常变更的表(增删改),提高了查询速度,但是会降低更新表的速度,更新表的时候,数据库还要去维护索引结构(保存索引文件)。
3、数据重复且分布平均的表字段,因此应该只为经常查询和经常排序的数据列建立索引
4、注意,如果某个数据列包含许多重复内容,为它建立索引就没有太大实际效果

提高OrderBy的速度
1、当Order by时select * 是一个大忌,只Query需要的字段,这点非常要:在这里的影响是:
1.1、当Query的字段大小总和小于max_length_for_sort_data而且排序字段不是TEXT | BLOB类型时,会用改进后的算法一一单
路排序,否则用老算法一一多路排序。
1.2、两种算法的数据都有可能超出sort_buffer_size的容量,超出之后,会创建tmp文件进行合并排序,导致多次I/O,但是用单路排序
算法的风险会更大一些,所以要提高sort_buffer_size。
2、尝试提高sort_buffer_size
不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的
3、尝试提高max_length_for_sort_data
提高这个参苡,会增加用改进算法的概率,但是如果设的太高,数据总容量超出sort_buffer_size的概率就会增大,明显症状是高
的磁盘I/O活动和低的处理器使用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值