当前位置: 首页 > news >正文

6.27_JAVA_面试(被抽到了)

1.MYSQL支持的存储引擎有哪些, 有什么区别 ? 

        In-no-DB(默认):支持事务安全(数据库运行时,能保证数据的一致性、完整性),支持表行锁,支持物理和逻辑外键。占用磁盘空间大。

        MEMORY:只支持逻辑外键,只支持表锁,不支持事务安全

        My-I-SAM:只支持逻辑外键,只支持表锁,不支持事务安全

       

2 了解过Mysql的索引嘛 ? 

索引能帮助MySQL高效获取数据。如果查找某个字段的话,MYsql查询很慢,因为它是磁盘读取以及时间复杂度是On,但是我们通过索引能够大大加快寻找这个数据的速度。索引在Mysql的底层是构建了一个B+🌳,把这个字段的数据放进去了。

它底层是通过构建B+树把建立的索引字段给纳入进去了。

B和B+树区别:

1️⃣B每个节点都存储数据,但B+只有叶子节点下一层存储数据

B+树非叶节点存的数据是这个数据指向的节点的最大值。如,上图第二行第一个节点中的15指向的是第三行第一个节点的最大值15.

B树的叶子节点为空节点。B+树叶子节点保存的是数据。

3 索引的底层数据结构了解过嘛 ?  

        如上,123是同一个答案。

4 什么是聚簇索引什么是非聚簇索引 ?

InnoDB索引引擎中,分为二级索引和聚集索引。

聚集索引:数据和索引存到了一起,必须有,且只有一个。字段通常唯一

二级索引:数据和索引分开的。

聚集索引的叶子节点存储的是行数据,但是二级索引存储的是行数据的主键id、索引字段所对应的数据。不存行数据是为了减少数据量。可以有多个。

5  知道什么是回表查询嘛 ? 

要查询的字段,不在构建的索引的字段之内。

通常一个二级索引,最后回到聚集索引的情况叫做会表。比如search * from user where name = 'Amy'             

其中name已经创立了二级索引,但是由于二级索引的叶子是主键ID,找不到*要查询的name为Amy的数据的所有字段所对应的值,只能回到聚集索引表,故称回表。 

6  索引创建原则有哪些?

1️⃣一般对经常查询,且数据量大的表建立索引。因为索引能大大加快查找速度。

2️⃣如果搜的比较少,或者表很小的时候可以不建立索引。因为索引会消耗磁盘空间。

3️⃣尽量使用字段空间小的做索引,比如char100比char10大,一般选char10做索引。

4️⃣前缀检索:如果要搜索的字段所对应的数据都比较大,比如字段“备注”里面存的数据都非常长。一般会只检索字段前面的若干字符。

5️⃣尽量采用区分度高的做索引,区分度越高,索引就越常用。

6️⃣使用复合索引时不能跳过对应的条件。我们使用复合索引需要先创建复合索引,如果创建了INDEX(A,B,C,D),我们where A C B D,顺序不同可以跑通,但是如果where BCD去掉了A,那么ABCD都跑不了。如果去掉了B,那么BCD都跑不了。这叫最左前缀匹配原则。很重要。

7️⃣一般建立联合索引,多放几个常用的区分度达到额字段进去,避免索引到超出联合索引包含的字段时回表。

8️⃣一般常被where、group by、order by的字段建立索引。

7 知道什么是左前缀原则嘛 ?

同上。复合索引。可以顺序不同,但是不能跳过

8 知道什么叫覆盖索引嘛 ? 

和回表相反。意思是我们要查的字段,包含在索引的字段之内

比如

CREATE INDEX idx_username ON users(username, email, age);//创建了索引,索引包含字段username、email、age
SELECT username, email FROM users WHERE username = 'john';//我们要查的字段是只有上述的username和email,被完全包含在了里面

9 索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ? 

索引不是越多越好,建立索引也会消耗空间,而且索引字段变多查找效率也会降低。

一般常被where、group by、order by的字段建立索引。不常用的不用建。

相关文章:

  • OpenLayers 渲染之矢量影像图层
  • 10【认识文件系统】
  • 【机器学习深度学习】线性回归(基本模型训练流程)
  • 【BugkuCTF】overflow
  • 为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半
  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • 基于STM32设计的扫地机器人
  • 双向循环链表及实现
  • 数学术语之源——(矩阵或行列式的)秩数(rank)
  • 机器学习1——贝叶斯理论上
  • GPU 性能可变性分析框架
  • 60 python asyncio模块(异步IO)
  • CANdela/Diva系列10--CDD文件在CANoe工程的应用2
  • LeetCode 312 戳气球题解(Swift)+ 区间 DP 原理详解 + 可运行代码
  • 高斯过程动态规划(GPDP)
  • FLUX.1 Kontext(Dev 版)训练lora基础教程
  • 将listener转换为事件流
  • 系统思考:结构影响行为
  • VS2022配置x86/x64调用32位和64位汇编语言动态库环境
  • 【C/C++】C++26新特性前瞻:全面解析未来编程