MySQL索引的分析

MySQL索引类型

    主键索引:这个就没要说了,一直都在用的索引类型

    唯一索引:唯一索引和主键索引的唯一区别就是唯一索引是可以有一个null的

        

    普通索引:普通索引是可以有任意个数的重复数据的

        

    组合索引:

        

    注:这边最重要的是组合索引是需要遵循最左原则的,也就是我不论查询什么where后面必须有name,如果没有name,那么不管后面的是什么样的查询组合都不会使用组合索引

    全文索引:MySQL5.6之后是支持全文索引的,但是,由于MySQL5.6并没有支持中文分词

    注:删除索引的方法

        

最左原则

    xplain可以去查看使用了什么索引,MySQL优化会用到这个,我们可以看type,那么type又代表什么了,这个代表了sql语句的优化程度,system代表最优,all代表最差,就是进行了全表扫描,中间的只要记住range就行了,如果级别比range还要低,那么证明你的sql语句需要去进行优化,但并不是说级别比range高要好,只能证明你的语句还行,不代表不需要优化,key代表我们使用了什么索引,没有的话就是空

    我们先创建一个组合索引

    

    1、通过name,age,sex查询数据,这个肯定会用到索引,我们可以看到type为ref,key是group_index,也就是使用了组合索引去查找

    

    2、通过name,age去查询,也使用了组合索引

    

    3、通过name,sex查询,也使用了组合索引

    

    4、通过age,sex查询,我们可以发现,type中是index,这个已经比range还低一个级别了,证明我们并没有真正的使用到组合索引,而是将索引完全扫描了一遍,从上到下,并不是直接定位到索引列的,所以这个会比全表扫描块一点,比all高一个级别

    5、通过name查询 ,可以看到也是使用了索引的

    6、通过age查询,这个和第四条查询一样,也就是说,我们的组合查询中,只要存在a,b,c当中的a,那么就是可以使用到组合索引的

    那么说了这么多,我们还是不知道为什么组合索引会有最左原则 ,这是因为索引是根据B+Tree来实现的,B+Tree中存储了索引本身,而组合索引是按照第一个值也就是a进行排序的,当我们使用了除a以外的索引之后,我们就没有办法根据已知索引来查找到需要的数据,所以会扫描索引来找出所有符合条件的索引,又因为索引比正常的全表扫描是要快一些的,所以,这种情况才会使得type成为index,而不是all

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值