如何分析一条sql的性能?( 三 )


mysql> explain select a from t where a > 99990 order by a;+----+-------------+-------+-------+------------------+---------+---------+------+------+--------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+------------------+---------+---------+------+------+--------------------------+| 1 | SIMPLE | t | range | a_index,ab_index | a_index | 5 | NULL | 10 | Using where; Using index |+----+-------------+-------+-------+------------------+---------+---------+------+------+--------------------------+1 row in set (0.00 sec)
我们再创建一个复合索引看看 。
mysql> alter table t add index ab_index(a,b);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
复制代码
mysql> explain select * from t where a > 1000;+----+-------------+-------+-------+------------------+----------+---------+------+-------+--------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+------------------+----------+---------+------+-------+--------------------------+| 1 | SIMPLE | t | range | a_index,ab_index | ab_index | 5 | NULL | 50166 | Using where; Using index |+----+-------------+-------+-------+------------------+----------+---------+------+-------+--------------------------+1 row in set (0.00 sec)
这条 sql 刚刚在上面也有讲到过,在没有创建复合索引的时候,是走的全表扫描,现在其实是利用了覆盖索引,同样是免去了回表过程,即在 (ab_index) 索引上就能找出要查询的字段 。
这篇文章通过几个实例介绍了如何使用 explain 分析一条 sql 的执行计划,也提到了一些常见的索引优化,事实上还有更多的可能性,你也可以自己去写一个 sql ,然后使用 explain 分析,看看有哪些是可以被优化的 。
 




推荐阅读