Java面试题之mysql

持续更新中~

1. MySQL的索引原理是什么?什么是索引?以及索引的优缺点?

索引是一种数据结构,使用索引可以快速访问数据库表中的特定信息。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引是一个文件,是要占用物理空间的
优点

  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  • 可以大大加快数据的检索速度,提高查询性能。
  • 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
  • 在使用分组和排序子句进行数据检索时,索引可以显著减少查询中分组和排序的时间。
  • 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

缺点

  • 创建索引和维护索引需要耗费时间,这种时间随着数据量的增加而增加。
  • 索引需要占用物理空间,除了数据表占用的数据空间之外,每一个索引还需要占用一定的物理空间。
  • 当对表中的数据进行增加、删除和修改时,索引也需要动态维护,这可能会降低数据的维护速度。

索引的基本原理

  • 把创建了索引的列的内容进行排序;
  • 对排序结果生成倒排表;
  • 在倒排表内容上拼上数据地址链;
  • 在查询的时候,先拿到倒排内容,再取出数据地址链,从而拿到具体数据;

2. 解释一下B+树和B树的区别及各自定义?

叶子节点:没有子节点的节点;
非叶子节点:度不为0的节点,又称分支节点;
根节点:顶端的节点称为根节点;
一个节点下面最多两个节点;
度:结点拥有的子树数;
平衡二叉树(AVL树):满足二叉树特性基础,每个节点树高度差不超过1;
二叉查找树:左子节点小于当前节点的键值,右子节点大于当前节点的键值

为什么选择B+树实现索引
B+树的内部节点只存放键,不存值,因此,一次读取,可以在内存中获取更多的键。一般来说索引本身也很大,不可能全部存储内存中,因此索引往往以索引文件形式存到磁盘上,索引查找就要产生I/O消耗,所以选择一个数据结构的优劣就是I/O查找复杂度,B+树叶子节点存有全部数据,叶子节点用链表链接连接,也是顺序存储的,读值得时候会提前读进内存,减少I/O次数,查询排序都快,磁盘分block块存储的,一次读取若干block块,B+树不存数据,所以,B+树单次IO信息量大于B树,B+树IO次数就少于B树,所以用B+树;

B树

  • B树适合随机检索;
  • B树不稳定,最好是根节点就查到了,最坏查到叶子节点;
  • B树的每个节点都带有数据;

B+树

  • B+树所有的叶子节点包含了全部的数据;
  • B+树所有非叶子节点可以看成是索引节点,没有数据,只存键;
  • B+树每个叶子节点都带有指向下一个叶子节点的指针,形成有序链表;
  • B+树必须查询到叶子节点;

3. MyISAM索引和Innodb索引的区别?

  • Innodb是聚簇索引,MyISAM是非聚簇索引;
  • Innodb的主键索引的叶子节点存储着行数据,因此主键索引非常高效;
  • MyISAM索引的叶子节点存储的事行数据地址,需要再一次寻址才能得到数据;
  • Innodb非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

4. 什么是聚簇索引?辅助索引?

聚簇索引:将数据存储和索引放到了一块,找到了索引就找到了数据(在一棵树上);
非聚簇索引:索引结构的叶子节点指向了数据的对应位置上(不在一棵树上)。
辅助索引:(也称为非主键索引或二级索引)

  • 辅助索引通常只存在于非聚集索引上,在InnoDB存储引擎中,辅助索引的叶子节点包含的不是数据行的完整信息,而是对应数据行的主键值。这是因为InnoDB的数据是按照主键的顺序存储的,也就是说,主键索引(也称为聚簇索引)决定了数据的物理存储顺序。
  • 当执行一个查询时,如果使用辅助索引来查找数据,InnoDB首先会查找辅助索引来找到相应的主键值,然后使用这个主键值去查找聚簇索引(即主键索引),最终定位到实际的数据行。这个过程需要两步,因此被称为“二次查找”。
  • 辅助索引不会存在于聚簇索引上。在Inn
转载请说明出处内容投诉
CSS教程_站长资源网 » Java面试题之mysql

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买