南京Java面试题整理

1.MySql索引与锁的解释以及底层实现原理

索引指的是给数据加上便于数据检索的字段,以便利与查找。好处就是加快查找数据,但是对数据的更改以及删除更慢了。就像Java中的数组或者lArrayist集合也属于查找快,但是增删改就慢了的有点。

LinkedList的优点是,增删快,查找慢。因为他的底层是链的结构。链是一个接一个的,所以在查找的过程中先要遍历,所以也就耗时间,,但是增删快这也是一个有点。

案例: 设有某个表15列,存在10列上有索引,共500w行数据,如何快速导入?

答: 1、把空表的索引全部删除 2、导入数据 3、数据导入完毕后再建立索引

而Mysql的底层索引用的是啥呢?

Innodb底层索引算法用的是B+树;

而MysqlInnoDB存储引擎的索引分为两种。

聚集索引与非聚集索引:

聚集索引与非聚集索引的区别是:页节点是否存放一整行记录

2.1 聚集索引

InnoDB存储引擎表是索引组织表,即表中数据按照主键顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,并且叶节点中存放着整张表的行记录数据,因此也让聚集索引的叶节点成为数据页。聚集索引的这个特性决定了索引组织表中的数据也是索引一部分。同时B+树数据结构一样,每个数据页都通过一个双向链表来进行链接。

   实际数据也只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引。在许多情况下,查询优化器非常倾向于采用聚集索引,因为聚集索引能够让我们在索引的叶节点直接找到数据。此外,由于定义了数据的逻辑顺序,聚集索引能够快速地访问针对范围值得到查询。查询优化器能够快速发现某一段范围的数据需要扫描。注意每一个页中的记录也是双向链表维护的。

2.2  非聚集索引

也称辅助索引,页级别不包含行的全部数据。页节点除了包含键值以外,每个页级别中的索引中还包含了一个书签,该书签用来告诉InnoDB存储引擎,哪里可以找到与索引相对应的行数据。因为InnoDB存储引擎表是索引组织表,因此InnoDB存储引擎的辅助索引书签就是相应行数据的聚集索引键。下图是聚集索引和辅助索引的关系:



 当通过辅助索引来寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到了一个完整的行记录。举例来说:一颗高度为3的辅助索引树中查找数据,那么需要对这颗辅助索引遍历3次找到指定主键;如果聚集索引树的高度同样为3,那么还需要对聚集索引进行三次查找,才能查找一个完整的行数据所在的页,因此需要6次的逻辑Io来访问最终的一个数据页。

猜你喜欢

转载自blog.csdn.net/yiyongjiajun521/article/details/81366382