MySQL面试复习笔记(一)
1、什么是索引?
索引是一种数据结构,可以帮助我们快速的进行数据查找。
好处:提高检索速度
坏处:降低增、删、改的性能,增加物理空间的消耗
2、索引具体用到的数据结构是什么?
索引一般用到的数据结构有,Hash和树(B树和B+树)
3、B树和B+树有什么区别?
①B树的内节点也会存储数据,B+树只有叶子节点才会存储数据;
②B+树的相邻节点之间都有指针连接在一起,而且是双向的指针,所以它不仅可以正序进行范围查找,还能倒序进行范围查找,而B树的范围查找必须先找到下限节点,在不停中序遍历找每一个范围内的节点,知道找到上限节点为止,比较耗时;
③因为内节点不存放数据,所以B+树可以有更多的内节点,树会更矮,由于只有叶子节点存放数据,每一次查询都会访问到最后一层的叶子节点,所以查询效率更加稳定;
④B+树可能存在重复的key,所以更加消耗存储空间;
⑤由于B树的每一个节点都会存放数据,每个节点都有可能找到关键字,所以查询效率不稳定。
4、为什么要用B+树?
由于IO操作比较耗时,所以在查询过程中,要尽量减少磁盘的交互次数。而B+树的查询时间复杂度是O(logn),可以满足我们的需求。
5、什么是悲观锁和乐观锁?
悲观锁和乐观锁都是一种逻辑上的锁,是对并发数据访问保证安全性的一种手段、
悲观锁就是每一次操作数据的时候都假设该数据都存在资源竞争,所以每次操作的时候都先去加锁,比如SELECT * FROM xx for update,在获取到锁之后才进行操作,如果没有成功获取锁的话,会阻塞。
乐观锁就是每次操作数据的时候都认为没有资源竞争,在修改数据的时候使用一个版本号字段作为条件,并修改改数据的版本号字段,这样只要提交修改的时候版本号对不上,就说明被其他人抢先修改了,从而修改失败,解决并发问题。
6、为什么要使用自增ID作为主键索引?
首先自增ID的数据是连续的,这样可以使得索引页中的数据更加的紧凑,并且减少空间碎片,提高空间的利用率,即使创建表的时候没有手动的设置自增ID作为主键索引,这个时候MYSQL也会自动的创建一个隐藏的自增ID主键索引。
7、hash索引和b+树索引的区别
哈希索引不能进行模糊查询和范围查询,也不适用符合索引最左匹配原则,这是因为需要走哈希算法获取关键字在找到相匹配的行,哈希算法需要保证原数据和需要查询的字段数据一致才能算出对应的关键字,尽管查询时间复杂度很低,但是如果关键词重复,会导致哈希冲突,冲突越严重查询效率越低。
哈希索引查询必定要回表,而普通索引不一定需要回表(覆盖索引、聚簇索引)
8、什么是聚簇索引?
聚簇索引就是一种把一条记录的所有数据都放到索引上的一种索引,主键索引就是聚簇索引。
聚簇索引的叶子节点存放的是所有字段的数据,非聚簇索引存放的是主键id(innodb)或主键记录的地址指针(myisam)
#mysql##面试复习#