sql优化

sql 站点默认 4年前 (2020-05-15) 561次浏览 0个评论 扫描二维码

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 等修改数据的语句,那么还是会记录所有行的变更。

喜欢 (1)
[支付宝扫码,感谢支持]
分享 (0)
关于作者:

您必须 登录 才能发表评论!