数据库-索引

索引

  • 加快查询速度的手段,能快速定位到需要查询的内容

  • 对表中的一列或多列进行排序的结构

  • 得另外组织索引属性值+相应元组指针,占用一定的存储空间,当基本表更新的时候,索引要进行相应的维护

  • 提高了查询速度,同时却会降低更新表的速度,占用磁盘空间的索引文件

哪些键要索引:

主键、经常需要用来搜索、排序、连接的键

索引分哪几种

  • 物理存储的角度:聚集索引(聚簇索引的顺序,就是数据在硬盘上存储的物理顺序,所以一个表中只能有一个)、非聚集索引(用B+树,叶子结点有指向表记录的指针)(聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。)

  • 按逻辑角度:主键索引(不允许空值)、普通索引(没有任何限制)、唯一索引(索引列的值必须唯一)、复合索引(多个字段上建立的索引,提高复合条件查询的速度)、

(主键指的是在一个属性组中能够唯一标识一条记录的属性或属性组。)

主键索引和普通索引有什么区别

  • 普通索引是最基本的索引类型没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引。

  • 主键索引是一种特殊的唯一索引一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个

Mysql索引主要有两种结构:B+Tree索引和Hash索引

  • Hash索引把数据以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。但是因为hash结构,每个键只对应一个值,而且是散列的方式分布。所以它并不支持范围查找和排序等功能

  • B树的优势是当你要查找的值恰好处在一个非叶子节点时,查找到该节点就会成功并结束查询。但不支持范围查询,且如果要扫库的话,只能中序遍历把所有结点都走一遍。

  • B+Tree所有索引数据都在叶子节点上,叶节点为属性值和对应的元祖指针。非叶结点都只是向下查找的索引部分,只含有其子树中的最大(或最小)关键字,无论查找成功与否,查找从从根到叶子节点才能终止。

  • B+树增加了顺序访问指针每个叶子节点都有指向相邻叶子节点的指针。可以提高区间效率,例如查询key为从18到49的所有数据记录,当找到18后,只要顺着节点和指针顺序遍历就可以以此向访问到所有数据节点,极大提高了区间查询效率。大大减少磁盘I/O读取要扫库的话,直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便

hash冲突解决办法

  • 链地址法:把关键字相同的记录记在一个单链表里
  • 公共溢出区法:给冲突的关键字一个公共的溢出区来存放
  • 再hash法:再用一个hash来算
  • 开放寻址法 :一旦冲突,就去找下一个空的位置

覆盖索引

  • 指一个查询语句的执行只用从索引中就能够取得不必从数据表中读取

  • 避免了查到索引后再返回表操作,减少I/O提高效率

  • 遇到以下情况,执行计划不会选择覆盖查询:1.select选择的字段中含有不在索引中的字段 ,即索引没有覆盖全部的列。2.where条件中不能含有对索引进行like的操作

常见问题

数据库索引的作用

创建过多索引表会有什么影响

索引的优缺点

索引分哪几种,哪些键要索引

索引的数据结构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值