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 分析,看看有哪些是可以被优化的 。
推荐阅读
- 如何给电脑硬盘设置密码
- 如何从单个服务器扩展到百万用户的系统?
- 程序员应该如何管理自己的电脑?
- 如何冲泡滇红茶 冲泡滇红茶方法要点和注意事项完整版
- 蒲公英根红茶如何做 蒲公英根红茶的制作方法过程
- 在一个千万级的数据库查寻中,如何提高查询效率?
- 八字合婚不好如何化解 合八字算婚姻
- MySQL语句是怎么实现的?需要进行合理的优化分析
- 如何辨别滇红茶 鉴别滇红茶把握四要素
- 贵州遵义红红茶产地在哪,制作工艺怎么样及其滋味如何