当前位置: 首页 > 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的字段建立索引。不常用的不用建。

http://www.lqws.cn/news/543439.html

相关文章:

  • 洛谷P5021 [NOIP 2018 提高组] 赛道修建
  • 深入理解 Linux `poll` 模型:`select` 的增强版
  • 记录一次飞书文档转md嵌入vitepress做静态站点
  • 微信小程序进度条progress支持渐变色
  • Stable Diffusion入门-ControlNet 深入理解-第三课:结构类模型大揭秘——深度、分割与法线贴图
  • 【LeetCode 热题 100】42. 接雨水——(解法三)单调栈
  • FPGA在嵌入式图像处理中的深度应用!
  • 深圳中青宝互动网络股份有限公司游戏运维工程师面试题(笔
  • python实战项目79:采集知乎话题下的所有回答
  • 【用户权限】超级用户(二)
  • win7实现永恒之蓝ms17_010漏洞之445端口
  • matlab实现相控超声波成像
  • 推荐一个基于C#开发的跨平台构建自动化系统!
  • 通信无BUG,ethernet ip转profinet网关,汽车焊接设备通信有心机
  • 面向大语言模型幻觉的关键数据集:系统性综述与分类法_DEEPSEEK
  • Spring Boot整合Redis指南
  • 从电费追缴到碳减排:一个预付费系统如何重塑校园能源生态
  • 使用 Vcpkg 安装 Qt 时的常见问题与解决方法
  • CloudFormation 实现 GitHub Actions OIDC 与 AWS ECR 的安全集成
  • pikachu漏洞练习---File Inclusion(文件包含漏洞)和Unsafe Fileupload(不安全的文件上传)
  • 为什么body{height:100%}会有滚动条?
  • 悦己汉服体验馆小程序(协同过滤算法、WebSocket即时聊天)
  • Solidity学习 - 代理模式中的初始化漏洞
  • Outlook总是提示登录微软,怎么办?
  • 非功能测试
  • 操作系统之文件管理(王道)
  • Linux内核启动:深入理解Initramfs与Initrd机制
  • 深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系
  • 【C/C++】C++26新特性前瞻:全面解析未来编程
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_rmem 和 net.core.rmem_default 关系