20180625-mysql优化
Posted yunchong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20180625-mysql优化相关的知识,希望对你有一定的参考价值。
mysql
数据优化
慢查询优化基本步骤
0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析
1.SQL_NO_CACHE :不使用mysql的缓存 SELECT SQL_NO_CACHE ...
(1)当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
useCache默认为true,表示会将本条语句的结果进行二级缓存。
(2)当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
useCache属性在该情况下没有。
2.explain
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
id:id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
select_type:查询中每个select子句的类型(简单OR复杂)
type:表示MySQL在表中找到所需行的方式,又称“访问类型”,常见类型如下:
ALL, index, range, ref, eq_ref, const, system, NULL
从左到右,性能从最差到最好
possible_keys: 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
3.两个表关联数据量大 花销大 如果能分表查询 然后合并在一起会提高效率 union union all 前者去重 后者效率高不去重
关联在一起的两个表数据量大 在去排序操作 开销比较大 可以先排序 在关联会好的多
参考:https://tech.meituan.com/mysql-index.html
以上是关于20180625-mysql优化的主要内容,如果未能解决你的问题,请参考以下文章