各类索引-尚

索引是一种储存方式

要查一张表,效率与时间复杂度硬盘IO有关,索引就是为了提高效率。

  • 选择搜索二叉树减少时间复杂度
  • 每个节点都可以看做一张表,如果这棵树太高,硬盘IO次数过多,所以选择搜索二叉树中的B+树
    在这里插入图片描述
    只有叶子节点会储存数据,非叶子节点作为目录项存在。
    每一层节点都有双向链表连接。

聚簇索引、非聚簇索引、联合索引

都是InnoDB引擎

  • 聚簇索引是主键作为关键字,叶子节点包含所有的信息
  • 非聚簇是按照其他属性作为关键字,叶子中包含主键关键字两条
  • 联合索引 根据多个属性作为关键字,叶子包括主键关键字两条
  • 总结
    • 一个表只有一个聚合索引,可以有多个非聚簇索引
    • 如果没有主键,聚合索引会选择唯一属性,如果都没有,系统会隐式设置长整型主键
    • 主键不要太大,因为非聚簇也包含主键,尽量自增
    • 非聚簇不影响数据物理结构
    • 非聚簇的数据修改快于聚簇,但查找慢于聚簇(回表的原因)
  • MyISAM引擎
  • 它的索引只有一种,关键字任意属性(主键可有可无),叶子节点储存的是关键字和表项地址,这样它无论怎样都会回表,但它的回表是拿着地址去找对应表项

操作

  • 创建
    通过关键字升序。刚开始只有根节点A,当一个根节点中的页面不够时,会赋值一份相同的页面B,然后新建一个空白页面C,A更改为目录项,B和C来储存数据(页分裂)
  • 插入
    如果是随机关键字插入,有可能要修改一些页内的很多内容,所以推荐自增。
  • 查找
    InnoDB:如果您要按照非主键属性来查找信息,会先通过非聚簇来找到对应主键,再通过聚簇索引来找到信息(回表)

代价

所以,代价是什么?

  • 空间:需要空间来储存目录
  • 时间:需要时间来维护目录项
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值