博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试中的数据库基本知识(索引的分类)
阅读量:3908 次
发布时间:2019-05-23

本文共 1595 字,大约阅读时间需要 5 分钟。

思维导图

在这里插入图片描述

架构

在这里插入图片描述

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息

目的:
(1)提高查询速度
(2)确保数据的唯一性
(3)可以加速表和表之间的连接,实现表和表之间的参照完整性
(4)使用分组和排序子句进行数据检索时,可以减少分组和排序的时间
(5)全文检索字段进行搜素优化
在这里插入图片描述

根据数据库功能索引分类(这里以Mysql为例)

一,主键索引(PRIMAY KEY)

主键:
  某一个属性组能唯一标识一条记录
  如:学生表(学号,姓名,班级,性别等等),学号时唯一标识的,可以作为主键
特点:

  • 最常见的索引类型
  • 确保数据记录的唯一性
  • 确定特定数据记录在数据库中的位置
    二、唯一索引(UNIQUE)
    作用:
    避免同一个表中某数据列中的值重复
    与主键索引的区别
  • 主键索引只能有一个
  • 唯一索引可有多个

三、常规/普通索引(INDEX)

作用:
快速定位特定数据
注意:
index 和 key 关键字都可以设置常规索引
应加在查询条件的字段
不易添加太多常规索引,影响数据的插入,删除和修改操作
四、全文索引(FULLTEXT)
作用:
快速定位特定数据
注意:
只能用于MyISAM类型的数据表
只能用于CHAR ,VARCHAR,TEXT数据列类型
使用大型数据集
五、组合索引
是在表中的多个字段组合上创建的索引
六、覆盖索引
通过索引就可以得到想要的结果
七、空间索引

基于数据结构的索引分类(索引的结构/实现方式):

B+树索引(Mysql默认使用B+树索引)

B+树为什么更适合用来做存储索引
(1)磁盘读写代价更低
(2)查询效率更加稳定
(3)更有利于对数据库的扫描

Hash(哈希索引)

缺点

(1)不能使用范围查询
(2)无法被用来避免数据的排序操作
(3)不能利用部分索引引键查询
(4)不能避免表扫描
(5)遇到大量Hash值相等的情况后性能大幅下降

BitMap(位图索引)(Oracle数据库支持)

位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等

R树索引

多叉树索引

基于索引的特点分类

1.密集索引与稀疏索引

秘籍索引文件中的每个搜索码值都对应一个索引值

稀疏索引文件只为索引码的某些值建立索引项
mysam存储引擎,不管是主键索引,唯一键索引还是普通索引都是稀疏索引
innodb存储引擎:有且只有一个密集索引。密集索引的选取规则如下:

  • 若主键被定义,则主键作为密集索引 如果没有主键被定义,
  • 该表的第一个唯一非空索引则作为密集索引
  • 若不满足以上条件,innodb内部会生成一个隐藏主键(密集索引)
  • 非主键索引存储相关键位和其对应的主键值,包含两次查找

2.单列索引,联合(组合)索引,全文索引

单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引,单列索引包括普通索引,唯一索引,主键索引

组合索引:是在表中的多个字段组合上创建的索引

面试题

什么是索引?

索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。
那么索引具体采用的哪种数据结构呢
常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树
为什么采用B+ 树吗?这和Hash索引比较起来有什么优缺点吗?
因为Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ Tree是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描。

转载地址:http://mgqen.baihongyu.com/

你可能感兴趣的文章
人生就是不断学习和修行-2018年个人总结
查看>>
开源代码学习技巧-Nats源码原理分析
查看>>
开源代码学习-nsq(v0.1.1版本)源码分析
查看>>
开源代码学习-nsq(v0.1.5版本)源码分析
查看>>
开源代码protoactor-go[e866f39]源码分析
查看>>
开源代码protoactor-go源码分析-async schedule
查看>>
开源代码TarsGo-v1.0.0源码分析之transport
查看>>
开源代码memberlist源码分析
查看>>
本人公众号技术文章目录-持续更新
查看>>
qt.network.ssl: QSslSocket: cannot call unresolved function
查看>>
Qt 记录
查看>>
Mac Qt 应用图标
查看>>
QT 实现Dock应用程序点击 ---Mac OS X
查看>>
IOS Resolutions & Display Specifications
查看>>
日期格式化说明
查看>>
储存过程中创建uuid方法
查看>>
MySQL存储过程详解 mysql 存储过程
查看>>
iPhone OS提供的音频单元
查看>>
iOS跳转到app下载页面和app评论页面
查看>>
iOS App被Apple拒绝的原因
查看>>