mysql 查询出来的结果做判断_MySQL中覆盖索引查询和select*查询执行结果案例分析...

索引优化建议

在MySQL中要尽可能使用覆盖索引进行检索,只访问索引的查询(索引列和查询列一致),减少select * 可提高查询效率

覆盖索引(Covering Index)

  1. 理解方式一:

就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。

  1. 理解方式二:

索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。

注意:

如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,

因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

案例对比

  1. 使用select * 查询结果分析
mysql>explain select * from user where name="tim" and age=12 and pos="CFO";
e538700e97900dc57b6a57df8b03dd2e.png

结果:我们发现select * 查询执行结果的Extra是NULL

  1. 索引列查询结果分析
mysql>explain select name,age,pos from user where name="tim" and age=12 and pos="CFO";
ccc0ebd5e3ada2e712871c82103130bc.png

结果:我们发现select * 查询执行结果的Extra是Using index

案例结论对比分析

注意:Using index:表示直接访问索引就足够获取到所需要的数据,不需要通过索引回表,所以Extra的执行效率排序是Using index最快

using index :使用覆盖索引的时候就会出现

using where:在查找使用索引的情况下,需要回表去查询所需的数据

using index condition(mysql5.6以后才出来的新特性):会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行,查找使用了索引,但是需要回表查询数据。

using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

排序:using index > using index & using where > using index condition > using index

案例1、案例2结论对比分析:当我们使用了索引列查询,效率要高于select *

点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值