配色: 字号:
MYSQL-优化
2020-09-26 | 阅:  转:  |  分享 
  
MYSQL优化演讲人2020-09-14目录01.02.查询缓存join优化04.03.limit优化排序优化06.05.常规优化索引问题
08.07.engine思路01查询缓存查询缓存02join优化join优化确保on和using字句有索引,考虑关联顺序mysql
5.6之前的一般需要改子查询为关联表多值max,改为group后max索引where和排序冲突的时候,改成关联表方式或者子查询走
索引不一定都快,区分度不够的索引可用考虑用复合索引join时要考虑类型一致,char型要考虑字符集一致,时间类型没走索引,要注意
隐世转换壹叁贰selectin会被改写为exists,造成查询缓慢,可改成关联join查询驱动表的选择,认清关联字段索引,可用
straight_join验证猜想querycache并不适合更新,插入,删除非常大的应用陆肆伍groupby,orderb
y只涉及表中一个列orderby+limit将limit,orderby内嵌,限制join数量和保证index排序joi
n时尽量将条件内嵌,先过滤后join。join优化join优化010203知道仅有一条时,用limit1限制notin或n
otexits可转换为外连接或等值连接某些情况下or可用用unionall或union代替03排序优化排序优化需要w
here+sort或者多个sort做联合索引,并考虑加上排序与groupby连用时用orderbynull禁用排序
索引长度导致不能优化010203040506单表查询,若filesort则可以用强制使用索引排序,或者用自关联方式sort
buffer别名若和字段重复也会影响排序优化排序优化相关参数filesort过程-普通&双路排序filesort过程-冗余单
路排序filesort优化A.sort_buffer_size排序缓存。壹排序优化B.read_rnd_buffer_s
ize第二次排序缓存。贰相关参数C.max_length_for_sort_data带普通列的最大排序约束。叁排序优化fil
esort过程-普通&双路排序取出字段a和每行的物理id(tid),然后在sort_buffer_size中排序2014根据排
序好的tid从磁盘中拿到行数据,放到read_rnd_buffer_size中2015排序优化filesort过程-冗余单路排序
区别是第一次是拿到所有相关数据而不只是TID,所以不用二次去磁盘取排序优化A增强tempdir指向的文件系统iofilesor
t优化增加相关参数大小B04limit优化limit优化当与orderby字段联合使用时,若排序字段有重复,需要增加排序列,
否则数据会错05索引问题索引问题复合索引最常用的放在最前面,无where顺序无关06常规优化常规优化explainprofile常
规优化explain01020304select_typetypeExtrapossible_keys0402030501simp
le,没有union或子查询primary,嵌套中最外层[?pra?meri]explainselect_typeunion/u
nionresult/dependentunion/dependentunionderived衍生,导出,子查询产生临时表
[di`raivd]subquery子查询第一个select语句typeconst,最多一条,system特例仅有一条eq_
ref,一种索引访问,仅返回1条,且索引为unique,primaryref,返回多条,索引的是最左前缀,可以用于=ref_or_
null,针对nullindex_merger,索引合并优化indexintersecttyperange,用index检索范
围的行unique_subquery,替换in子查询index,全扫描索引index_subquery替换in子查询ALLtyp
eindex_merger,索引合并优化5.1以后支持的,一个表可以使用多个索引030402060501Usingfilesor
t,没有用索引次序读到排序UsingtemporaryNotexistsexplainExtraUsingindexUsi
ngindexconditionUsingwhereexplain010203possible_keyskey实际使用的索
引key_len,key的长度ref使用哪个列与key一起选择行07思路思路010302周期性变化还是偶尔检查mysql的io和cpu利用比例子主题208engineengineMyisamInnoDB锁感谢聆听
献花(0)
+1
(本文系职场细细品原创)