Mysql SQL优化

MySQL中有优化器模块Query Optimizer,主要功能是将客户端的SQL,结合数据库系统收集的统计信息,优化SQL进行优化,Query Optimizer基于Query Tree优化SQL,Query Tree通过优化实现DBXP经典数据结构和Tree构造器生成一个指导SQL请求处理的所有步骤。

SQL优化的思路为:
1、找出需要优化的合适SQL
执行次数多而且效率还可以的SQL比执行次数少而且效率低的SQL,更需要优化。

2、定位SQL优化的性能瓶颈
有点SQL使用CPU太多,有的SQL使用IO太多,需要找出性能瓶颈,可以使用Mysql提供的PROILING工具分析性能瓶颈

3、使用Explain和Proile工具对SQL进行分析
查询数据时尽量使用索引。

SQL优化方法:

一、Explain分析SQL执行计划

Explain [extended] select …

extended关键字是Explain语句产生附加信息。

在这里插入图片描述

Explain返回属性

select_type:代表查询类型

SIMPLE:表示简单查询,不包括关联查询和子查询
在这里插入图片描述
PRIMARY:表示主查询或最外层的查询
在这里插入图片描述
UNION,UNION RESULT:表示连接查询中的第二个查询或后面查询语句
在这里插入图片描述
DEPENDENT SUBQUERY:表示子查询中第一个查询
在这里插入图片描述
DERIVED:表示用于from子句里有子查询,子查询将结果放在临时表里
在这里插入图片描述

type:表的连接方式

system:只有一行数据的系统表
const:数据表最多只匹配一行,在查询开始时被读取出来作为常量看待。

possible_keys:指出Mysql能使用哪个索引查询数据。

rows:显示Mysql在表中进行查询时必须检查的行数。

extra:列显示Mysql在处理查询时的详细信息。

using index:说明使用索引访问数据。
using where:是在存储引擎收到行数据后进行过滤。
using temporary:代表Mysql对结果集进行排序时使用了临时表。
using filesort:说明Mysq使用外部索引对数据排序。

当查询计划的Extra扩展信息出现using temporary,using filesort时,说明SQL需要优化。

优化SQL具体方法:

一、SQL拼写中尽量使用替位符,不要直接使用字符值拼写SQL
JDBC编程需要使用PrepareStatement,不使用Statement.
Mybatis中拼写SQL尽量使用#,不使用$
二、SQL的Where子句查询条件,尽量使用索引过滤,并且建立索引字段的顺序需要与Where条件中查询列顺序相同.
三、Where子句中使用or关联条件,需要将关联列都创建索引
四、Where子句中使用like模糊查询,%统配符需要在后面,否则不走索引,例如:name like ‘Java%’
五、尽量少使用in关键字,除非in语句中的值是常量而非子查询。
六、尽量少使用子查询,尤其from子句中的子查询产生临时表。使用关联查询代替子查询。
七、尽量使用union all合并两个结果集,避免使用or连接符。
八、需要执行order by排序,尽量在排序列上创建索引。
九、分组查询通常自动排序,可以通过order by null避免分组排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值