如何定位慢查询
开源工具
调试工具:Arthas
运维工具:Prometheus、Skywalking
mysql自带满日志
#/etc/my.cnf
#开启mysql慢日志查询开关
slow_query_log=1
#设置慢日志的时间为2秒,sql语句执行时间超过2秒,就会视为慢查询,记录慢日志查询
long_query_time=2
sql执行慢如何优化
EXPLAIN +sql语句。
possible_key 当前sql可能会使用到的索引。
key 当前sql实际用到的索引
key_len 索引占用的大小
Extra (Using index condition) 使用了索引,但是需要回表查询数据
type 性能由好到差为null,system,const(主键),eq_ref(主键或唯一索引),ref(索引),range(范围查询),
需要优化:index(全索引查询),all(全盘扫描)
索引 B+树
1、非叶子节点只存储指针,不存储数据,磁盘读写代价更低。
2、叶子节点存储数据,查询效率更稳定。
3、叶子节点数据是双向链表,更有利于扫库和区间查询。