Mysql索引

什么是索引?

        索引用一句话概括就是将无序的数据变为有序。可以快速地寻找具有特定值的记录,如果不使用索引。查询时将会遍历整张表。可以理解为索引相当于书的目录,有了目录,我们可以直接定位到我们想查找的内容。

索引的原理?

  1. 把创建了索引的列内容进行排序
  2. 将排序的结果生成为倒排表
  3. 在倒排表上拼接对应的数据地址链
  4. 查询时,先获取倒排表,取出对应的数据地址链。返回数据

索引的设计原则?

  1. 出现在where中的字段最好加上索引
  2. 主键和外键的数据列必须加上索引
  3. 一般建立在小字段上,对于文本字段不建立索引
  4. 经常出现在ORDER BY,GROUP BY,DISTINCT后面的字段,建立索引
  5. 不要建立过多的索引。索引也是需要占据额外的物理空间,并且也需要维护。会影响增删改的效率
  6. 列有大量的重复数据不要建索引。例如性别,只有男/女。因为Mysql优化器会走全表扫描,相当于建立了一个无效索引。

索引的结构?

B树:

        

        B树是一种多路搜索树,每个节点存储三个元素。key,key对应的数据地址data和指向下一层地址的指针。查询时,从根节点向下查找,知道找到对应的key。

        缺点: 查询速度跟树的高度挂钩。树的高度越高,效率越慢。因为每向下查询一层,就相当于做了一次I/O操作。磁盘操作效率是很慢的。

B+树:

        是一个平衡多叉树。和B树最大区别有两个,第一个是B+树非叶子节点存储2个数据,key和指向下一层的指针。叶子节点存储地址链。叶子节点之间通过双向指针连接。构成一个有序链表。第二个是B+树只有在叶子节点才命中

Hash:  

        底层是哈希表。使用哈希算法将键换算为hash值,存储到对应的位置。查询单个数据最快。只适合等值查询

        缺点: 不支持范围查询,不支持索引值的排序操作,不支持联合索引的最左匹配

索引分类?

        主键索引: 创建主键的索引,只能有一个,不允许为NULL

        唯一索引: 索引值的列必须唯一,可以有多个唯一索引。允许多个NULL

        普通索引: 单个列的索引,可以创建多个

        全文索引: 匹配文本中的关键字,可以有多个。5.6之前只有MyIsam支持全文索引。5.6之后InnoDB也支持全文索引

        联合索引: 一个索引包含多个列,使用时需要满足最左原则

聚簇索引和非聚簇索引?

        聚簇索引: 不是一种索引类型,而是一种存储数据的数据结构。只有InnoDB的主键索引才是聚簇索引。将数据和索引存放在一起。找到索引也就找到了数据。插入速度受主键的顺序影响。如果主键是自增的则插入速度最快

        非聚簇索引: 索引和数据是分开的。第一次找到主键值,第二次根据主键值找到行数据。

更多知识请移步个人博客:33sora.com​​​​​​​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值