分析 EXPLAIN 的结果
现在我们来分析一下 EXPLAIN 的结果。
explain select * from salaries where from_date ='1996-12-02';
复制代码
select_type 是 simple 表示这是一个简单查询;查询的表是 salaries;type 是 ALL 表示发生了全表扫描,全秒扫描的性能是最差的;possible_keys、key、key_len 都是空,说明没有使用索引;rows 执行这条 SQL 语句需要扫描两百多万行数据才能返回,filtered 的值是百分之十;最后 extra 的值是 Using where 表示使用了where 条件。
通过执行这条 SQL 语句,可以发现执行这条 SQL 语句需要花费 600 毫秒,说明这条 SQL 语句执行的性能比较差。
下面我们再来分析一条 SQL 语句。
经过运行的结果来抗,从中可以发现 explain 展示了两行结果,当有多行结果的时候,这个 id 字段还是有用的,它可以描述 SQL 语句的执行过程。
如果 explain 的结果包含多个 id 值,比如 id 的值为 1 和 id 的值为 2,那么数字越大越先执行,也就是说 id 的值为 2 的先执行,id 的值为 1 的后执行。而对于相同 id 的行,那么会从上到下依次执行,这一点在前面也介绍过。
其中一条操作了 employees 表,另外一条操作了 salaries 表,由于我们起了别名,所以 table 这一列展示了别名。
从 type 来看,操作 employees 表的时候,是 const,这是一个非常好的级别,使用了主键索引,可能会使用组件,实际使用的也是组件,并且只扫描了一条数据,因为我们指定了条件去查询的。rows x filtered 为 1,也就是 MySQL 预估会使用 employees 表的一行数据和 salaries 的表去关联。
同理,操作 表的时候,type 的值是 ref,ref 的性能也是不错的。也使用了主键索引,最后经过估算,需要扫描 17 行数据。
可视化工具分析 SQL
这里我们介绍两款可视化工具,一款是 IntelliJ IDEA,只要这款工具怎么使用,相信很多小伙伴都知道,另一是 MySQL 官网提供一款 MySQL Workbench。下面我们一起来简单使用一下这两款工具。
使用 IntelliJ IDEA 分析 SQL。选中 SQL 语