数据库索引问题定位与分析

数据库索引问题定位与分析

一.数据库服务器添加慢查询配置

1.my.cnf文件添加监控慢查询配置

cd /etc/my.cnf

vi my.cnf

添加如下配置:

slow_query_log=1

long_query_time=0.01

2.重启数据库服务器

systemctl restart mysqld

3.检查配置是否生效

show variables like '%slow_query_log%';

cd /var/lib/mysql

二.慢查询日志分析

1.打印查询次数前20的sql语句

mysqldumpslow -s at -t 20 huangshao-slow.log

2.对慢查询sql语句进行执行计划分析

在navicat里面拷贝慢查询语句,执行前加explain表示分析sql

Const:表中只有一个匹配行,用到primary key或unique key

Eq_ref:唯一性索引扫描,key的所有部分被连接联接查询使用,且key是unique或primary key

ref:非唯一性索引扫描,或只使用了联合索引的最左前缀

Range:索引范围扫描,在索引列上进行给定范围内的检索,如between,in(1,100) Index:遍历索引...

All:全表扫描

Prossible key:使用哪个索引能找到行

Keys:sql语句使用的索引

rows:mysql 根据索引选择情况,估算查找数据所需读取的行数

三.优化方案

1.添加索引

选择sql语句中where字句中的字段添加索引,并保存索引

索引类型:

Normal:普通索引,允许重复数据

Unique:非普通索引,不允许重复数据

Fulltext:全文索引,适用于大字段

2.sql执行计划分析

explain

select

id, user_name, password, age, gender, phone_num, email, address, create_time, update_time

from user

where user_name = 'user_100'

3.优化效果对比

Tps提升10倍,响应时间减少90%

应用服务器cpu使用率提升65%

数据库服务器cpu使用率提升80%

posted @ 2023-06-27 17:00  常疯大虾  阅读(19)  评论(0编辑  收藏  举报