【Java核心面试宝典】Day22、Java数据库索引高频面试总结
一、数据库索引的作用和使用场景
作用:
1、通过创建唯一性索引,可以保证数据库中每一行数据的唯一性
2、大大加快数据检索速度,加快表与表之间的连接
3、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序时间
4、通过使用索引,在查询过程中,可以优化隐藏器,提高系统性能
缺点:
1、创建索引和维护索引都需要消耗时间,这种时间会随着数量的增加而增加
2、索引需要占用一定的物理空间,除表结构要占用数据空间以外,索引也需要占用物理空间
3、当对表中数据进行增加。删除和修改时,都需要动态的维护索引,这样就降低了数据的维护速度
使用场景:
1、在经常需要搜索的列上,可以增加搜索速度
2、在拥有主键的列上,可以强制该列的唯一性和组织表中数据的排列结构
3、在经常需要建立连接的列上使用,可以加快连接查询的速度
4、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,所以其指定的范围是连续的
5、在需要经常进行排序的列上使用索引,因为索引已经排序,所以可以加快排序的时间
6、在经常使用在where子句的列上创建索引,加快条件的判断
二、数据库优化有做过吗?有哪些优化?(二面也问了)
数据库优化的方式:
1、选取最适用的字段属性(将表中字段的宽度设置得尽可能小;尽量把字段设置为not null,防止进行null值比较;尽可能将属性设置为数值型数据enum,数值型数据处理起来比文本数据要快)
2、使用连接(join)查询来代替子查询(是因为使用连接查询不需要在内存中创建临时表来完成逻辑上需要两个步骤的查询工作)
3、使用联合(union)来代替手动创建的临时表,(它会将需要创建临时表的两个或多个select查询合并到一个查询中,在客户端查询会话结束后,会自动删除这个临时表,保证数据库的完整性)
4、进行事务控制(事务的重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰)
5、锁定表(防止多条语句同时对一个表进行操作)
6、使用外键(增加表结构的关联性)
7、使用索引(加快查询速度)
8、优化查询语句(最好将相同的字段进行比较;在建有索引的列上尽量不要使用函数操作;在搜索字符型字段时,尽量不要使用like或通配符;避免在查询中进行自动类型转换,自动类型转换会让索引失效;)
三、二叉树如果一侧子树节点过多,如何优化?
在插入元素的时候不断的修改树结构,保持二叉树的平衡,就可以避免二叉树一侧子节点过多
四、B+树了解过吗?
B树和B+树主要用于数据库索引方面,
B树相对于平衡二叉树,每个节点包含的关键字增加了,在应用到数据库的时候,可以减少数据查询次数和复杂度。
B+树是B树的升级版,相对于B树,B+树更加充分的利用了节点空间,提升了查询速度,查询速度接近于二分查找。
B+树的特点:
- B+树的层级更少,相对于B树,B+树的非叶子节点所能够存储的关键字数量更多,树的层级更少,所以查询更快。
- B+树的查询速度更稳定,B+树的所有关键字数据都存储在叶子节点上,所以每次查找次数都是相同的,
- B+树天然具备排序能力,B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据的时候更加的方便,数据紧密型更高,缓存的命中率也会比B树高。
- B+树的全节点遍历更快,B+树遍历整棵树只需要遍历所有的叶子节点即可,
五、红黑树如何实现快速查询的?
利用二分查找提升查询效率
六、堆结构知道多少?说一说堆排序?
堆的结构是一个完全二叉树,主要是用于数组的存储,
堆分为大根堆和小根堆,堆排序是对直接选择排序的优化,以大根堆为例,在进行元素的排序的时候,会从所有的元素中取出最大的元素和第一个元素互换,然后再从剩下的元素里面选出最大的和第二个元素互换,以此类推,直到所有的记录排序完毕。
欢迎小伙伴们补充指正!
我是灰小猿,我们下期见!
- 点赞
- 收藏
- 关注作者
评论(0)