(一)先说下调优的步骤吧
1、使用工具去发现慢SQL,工具有SkyWalking、VisualVM、JavaMelody、Alibaba Druid 等等。
2、分析慢SQL、常用SQL前加explain
3、使用索引调优,看最总执行SQL时间,如果能控制到100-200ms(参考值)是不错的SQL了,当然这个得结合系统实际使用来看。
(二)MySQL存储使用的数据结构
1)、索引有 B-Tree索引、hash索引、全文索引、空间索引
1、二叉树->平衡二叉树->B-Tree->B+Tree
B-Tree 关键字带数据
B+Tree 叶子节点是链表,如果是InnoDB引擎链表里带数据,还有就是带指针,指针再指向数据
(三)调优示例
1、在这使用MySQL自带的慢查询日志
1)、先查看MySQL是否开启慢查询日志(图中就是已开启的),图中的slow_query_log_file就是日志输出文件位置。
2)由于手头上没有特大数据的表,所以只能大概演示一下操作过程吧,日后有了再补上。
做调优看列,type为all的话一般都调一下、key_len越小越好、rows越小越好、filtered越小越好。
3)加索引
####### 1)点击要加索引的表,右键选择Modify Table
在这里添加索引,添加的索引要遵循最左前缀,加的索引如果前面是范围查询的如a.id > 123,那么加在后面的索引是没用的。
做覆盖索引
####### 2)加索引的位置
GROUP BY、ON、WHERE、LIKE、ORDER BY
加ORDER BY索引可以的话把order by 的字段放第一位就相当于做了排序。
建议加索引的字段不为null,如果可以为null的话,数据库还会多存储一个判断是否为null的数据。
####### 3)在关联表的时候用straight_join可以把关联的表设置成主表
4)索引不是创建越多越好,数据库维护索引也是有一定开销的,要注意冗余索引,重复索引、废弃索引
查找冗余索引…工具
pt-query-digest、pt-duplicate-key-checker
本人实力有限,如有不足,望各位大佬评论指点指点,感谢感谢