【SQL优化原则和方案】

sql 优化

优化原则

1,减少数据访问量

2,减少数据计算操作

#查询优化的方案

1,良好的编码习惯

2,优秀的sql编写逻辑

3,定位需要优化的sql,比如慢sql

4,调整优化策略,并进行测试

#优秀的查询sql编写逻辑

*查询时候,尽量避免使用select *;

1,这样就可以数据扫描和节省资源,网络开销;

2,要尽量使用覆盖索引(索引中已经包含你需要的数据),减少回表查询;

*避免在where 句中使用or 作为连接条件。

1,or可能会使 索引失效,进而执行全表查询;

2.全表查询的效率相对基于索引的查询的效率比较低。

联合查询,union 不包括重复,union all 包括重复。

*where条件尽量不要跟null值进行等值比较,要用is not null

Is not null 可以调整为 >0; (数据量比较大时候,但是>0数量比较少时)

#避免where句中使用!= 或者<>操作符

*表连接优先使用 inner join 内连接,而非外连接,使用小表驱动大表。小表放前面

*清空表中数据优先使用truncate

*插入多条数据时候可以考虑使用批量插入。

*避免在where查询条件中使用内置sql函数,导致索引失效。

*当有多个查询条件、分组条件、排序条件时,尽量使用联合索引(组合索引)。

*使用like模糊查询,避免在查询条件前面在%,导致索引失效。

*表设计时,字段类型能用简单数据类型,不用复杂类型。

Create index index_salary on employees (salary) using Btree;

#慢查询分析

如何定位,方案有两种

1,查询慢查询日志,确定

2,show processlist 查询正在执行的慢查询

#如何慢查询分析?

1,开启慢查询日志,默认关闭状态;

2,设置慢查询阈值

3,确定慢查询路径文件

4,确定文件名

#如何开启慢查询日志?

mysql >  set global slow_query_log=on;

Show variables like ‘%slow_query_log’;

#设置阈值?

set global long_query_time=1;

一般1秒,要求高的设置0.1秒

测试可设为0.

#慢查询日志路径?show 。。。datadir

#文件名?。。。file

#慢查询分析?explain,show profile

查询每个部门最低薪资的员工的信息

derived : from 子句后的相对比较复杂的查询,派生表 临时表

union 联合

Select ….from…

Union

Select…from …

simple 不包括

primary 最外层

subquery select里层子查询

#查询等级

system>const>eq_ref>ref>range>index>all

1,all 全表查询 ,性能最差

2,index

3, const 表示使用主键索引,唯一索引做等值查询的情况。

4,reg 表示使用非唯一索引进行单值查询。

Where salary=10000

5,eq_ref:出现多表join查询,表示前面

6,range 范围 >,<, in ,>=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值