1查看gql执行频率
1.1.1查询数据库的sql执行频率
show global STATUS like ‘Com_______’
1.1.2Innodb存储引擎查看
show status like ‘Innodb_rows_%’
1.2定位低效率执行sql
1.2.1查询当前SQL执行效率
show processlist
explain分析执行计划1.2.2
explain select count(*) from e_mp_power_curve
1.2.3show profile分析sql
(1)查询看系统是否支持profile
SELECT @@have_profiling
(2)查看是否开启
select @@profiling
(3)开启
set profiling =1
(4)查询sql语句耗时
show profiling
(5)查询sql每个阶段的耗时
show profile for query 9
(9为id)
2.索引的使用
2.1单列索引
create index indx_item_title(索引名) on table(tile)(表明与字段名)
2.2联合索引
create index indx_item_title_sta_add(索引名) on table(name,status,address)(表明与字段名)
(1)(联合索引要遵循最左前缀法制) 最左前缀法制 :指的是查询的索引最左前列开始,不能跳过索引中的列
(2)范围查询后的字段失效
(3)不要在索引列进行运算操作,负责索引失效(如select *from tb_seller where substring(name,3,2) = ‘科技’ )
(4)使用or时,or之后没用到索引,索引失效
(5)like百分号加前面索引失效
(6)in走索引 not in不走索引
2.3 group by 优化
(1)不排序 select age,count(*) from emp group by age order by null
(2) 加索引
2.4子查询优化
(1) 尽量使用多表连查,不要子查询
2.5 or优化
(1) 使用union
select *from emp where id =1 union select *from emp where id = 10;
2.5 优化分页查询
(1) 排序字段添加索引
2.6 sql提示
(1)指定使用索引use index(索引名)
select *from tb_seller use index(索引名) where name= ‘ss’;
(2)忽略索引
ignore index(索引名)
(2)强制执行索引
force index(索引名)
3应用优化
3.1 减少mysql的访问
(1) 能一条完成的sql,不要写成多条
3.2 查询缓存配置
mysql 8 已经废弃
4 日志
4.1 错误日志
(1) 查询错误日志在哪
show variables like ‘log_error%’;
4.2 二进制日志
(1) 二进制日志(BINLOG)记录所有DDL(数据定义语言)语句和DML(数据操纵语言)语句,但不包含查询语句。此日志对于灾难时的数据恢复起着极其重用的作用,mysql的主从复制,就是通过binlog实现的
(2)默认时没有开启的
(2)配置文件位置:/user/my.cnf
日志存放位置:配置时,给定了文件但没有指定路径,日志默认写入mysql的数据目录
(3)开启配置
(4) 日志格式
Row: 日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改
Statement: 每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。
Mixed:
从 5.1.8 版本开始,MySQL 提供了除 Statement 和 Row 之外的第三种复制模式:Mixed,实际上就是前两种模式的结合。 在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。 新版本中的 statment 还是和以前一样,仅仅记录执行的语句。而新版本的 MySQL 中对 row 模式也被做了优化,并不是所有的修改都会以 row 模式来记录,比如遇到表结构变更的时候就会以 statement 模式来记录,如果 SQL 语句确实就是 update 或者 delete 等修改数据的语句,那么还是会记录所有行的变更。