Mysql SQL优化

你的名字 2022-03-08 02:28 310阅读 0赞

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避免分组排序。

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mysqlsql优化

    前天业务老师叫我过去查看系统日志,晚上11.00的一般都会卡一下原因!当出现慢查询,DDL 操作都会被阻塞,,这对实时备份重要数据的系统来说是不可容忍的,严重的时候会导致...

    相关 mysql SQL优化

    > 一、合理使用索引 1.索引结构   1 默认情况下,一旦创建了一个表,这个表设置了主键,那么MYSQL会自动的为这个主键创建一个unique的索引;   2 索引

    相关 mysql SQL优化

    1.应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.如下查询不走索引 1)where 子句中使用!=或<>操作符 2)w

    相关 Mysql SQL优化

    MySQL中有优化器模块Query Optimizer,主要功能是将客户端的SQL,结合数据库系统收集的统计信息,优化SQL进行优化,Query Optimizer基于Quer