Java教程

数据库面试题目_索引

本文主要是介绍数据库面试题目_索引,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

刘鸿宁 你看到了吗

文章目录

  • innoDB 和 myisam 的区别
  • 索引
    • 什么是索引?
    • 常见的索引的数据结构?
    • B+树和B树的区别?
    • B+树和hash表的区别?
    • 为什么innoDB表一定要建立一个主键,而且必须是整型自增主键?
    • 聚集索引与非聚集索引、回表
    • InnoDB 都是聚集索引吗?
    • 联合索引、最左匹配原则
    • 什么是覆盖索引

innoDB 和 myisam 的区别

  1. innodb支持事务、外键,myisam不支持事务、外键。
  2. InnoDB支持行锁,myisam支持表锁,每次更新增加删除都会锁住表。
  3. innoDB是聚集索引,myisam是非聚集索引,索引和数据是分开的,需要一个回表操作。

索引

阿里面试索引题目 https://zhuanlan.zhihu.com/p/78982303

什么是索引?

索引是帮助MySQL高效获取数据的排好序的数据结构,用于帮助我们在大量数据中快速定位到我们要找的数据。

常见的索引的数据结构?

  1. hash表
  2. B-树
  3. B+树

B+树和B树的区别?

  1. B+ 树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据。
    之所以这么做是因为在数据库中页的大小是固定的,InnoDB 中页的默认大小是 16KB。
    3层可以存10亿个数据
  2. B+树的所有叶节点都会有一个双向链表,方便于实现范围查找。

B树

B+树

B+树和hash表的区别?

  1. hash表进行一次计算就能得到数据,很多时候比B+树高效。
  2. hash表仅仅支持“=”、“IN”,不支持范围查找。
  3. hash表存在hash冲突的问题。

为什么innoDB表一定要建立一个主键,而且必须是整型自增主键?

  1. 如果无主键,会在所有的列中找,找一个可以当主键的。
  2. 如果找不到主键,就会自己维护一个隐藏列。
  3. int型 UUID不是整形,也不是自增 比大小时更方便 减少存储空间,服务器硬盘资源价格贵

聚集索引与非聚集索引、回表

  1. 聚集索引(聚簇索引):以 InnoDB作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。
    这是因为 InnoDB 是把数据存放在 B+ 树中的,而 B+ 树的键值就是主键,在 B+ 树的叶子节点中,存储了表中所有的数据。
    这种以主键作为 B+ 树索引的键值而构建的 B+ 树索引,我们称之为聚集索引。

  2. 非聚集索引(非聚簇索引):以主键以外的列值作为键值构建的 B+ 树索引,我们称之为非聚集索引。

  3. 非聚集索引与聚集索引的区别在于非聚集索引的叶子节点不存储表中的数据,而是存储该列对应的主键,想要查找数据我们还需要根据主键再去聚集索引中进行查找,这个再根据聚集索引查找数据的过程,我们称为回表。
    明白了聚集索引和非聚集索引的定义,我们应该明白这样一句话:数据即索引,索引即数据。

InnoDB 都是聚集索引吗?

不是,InnoDB的非主键索引是非聚集索引,我们需要在非主键索引中找到主键,然后再根据找到的主键在主键索引中找到相对应的数据。(回表)

联合索引、最左匹配原则

多个属性作为索引。最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。
如果不服从最左匹配原则,这个索引是无效的,无法定位到数据,数据就不是按照顺序排序的。

什么是覆盖索引

覆盖索引是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。

这篇关于数据库面试题目_索引的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!