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

北京JAVA基础面试30天打卡10

1.最佳左前缀原则是什么

Q:什么是MySQL索引I的最左匹配原则?

A:最左匹配原则是指,在复合索引引中,查询条件需要按照索引列的顺序从最左侧列开始依次匹配。只有查询条件中的列按照索引的最左边列开始进行匹配,索引引才能被有效使用。

Q:能否举例说明复合索引在查询时遵循最左匹配原则的情况?
A:假设有以下复合索引(name,age,city),以下查询会遵循最左匹配原则:
SELECT * FROM User WHERE name ='Alice' AND age =30  

这里查询条件首先匹配了name,接着匹配 age,所以可以有效地使用复合索引。

Q:如果查询条件中的列没有按索引顺序给出,会发生什么?

A:如果查询条件没有按照索引的顺序给出,MySQ将无法利用复合索引。例如:

SELECT* FROM User  WHERE  age =30 AND name = 'Alice'

在这种情况下,MySQL将不会使用复合索引l(name.age,city),因为查询中没有从最左侧的name列开始。

Q:假设你有一个查询非常慢,且你已经确定查询使用了一个复合索引。你会如何诊断并优化这个查询?

A:首先,可以使用EXPLAIN语句来查看查询的执行计划,确认是否使用了正确的索引。如果发现查询没有充分利用素引,可以检查是否存在违反最左匹配原则的情况,调整查询条件的顺序。其他优化措施包括减少返回的列数、使用覆盖索引等。

2.为什么MySQL使用B+树?

B+树在数据库系统中具有以下几个显著优势:

**1)高效的查找性能:**B+树是一种自平衡树,每个叶子节点到根节点的路径长度相同,B+树在插入和删除节点时会进行分裂和合并操作,以保持树的平衡,但它又会有一定的冗余节点,使得删除的时候树结构的变化小,更高效。查找、插入、删除等操作的时间复杂度为O(logn),能够保证在大数据量情况下也能有较快的响应时间。

**2)树的高度增长不会过快,使得查询磁盘的I/0次数减少:**B+树不像红黑树,数据越多树的高度增长就越快。它是多叉树,非叶子节点仅保存主键或索引值和页面指针,使得每页能容纳更多的记录,因此内存中就能存放更多索引,客易命中缓存,使得查询磁盘的I/O次数减少。
**3)范围查询能力强:**B+树特别适合范围查询。因为叶子节点通过链表链接,从根节点定位到叶子节点查找到范围的起点之后,只需要顺序扫描链表即可遍历后续的数据,非常高效。

在这里插入图片描述

B+树和B树区别

1)B树每个节点都存储了完整的数据,而B+树非叶子节点仅存储key和指针,完整数据存储在叶子节点。这使得B+树可以在内存中存放更多索引顶,减少磁盘查询次数
2)B+树叶子组成了链表,便于区间查找,而B树只能每一层遍历查找。
3)B+树查询时间更平均、稳定,都需要从根节点扫描到叶子节点。而B树则在非叶子节点就可能找到对应的数据返回。

3.MySQL三层B+树能存多少数据?

在 MySQL 的InnoDB 存储引擎中,B+树默认数据页大小
为 16KB。参数:每个节点页大小为16KB(即16384字节)。假设每个数据记录的主键和数据大小为1KB(一般会比这个小,但这里取整方便计算)。每个内部节点(非叶子节点)存储的是指向子节点的指针和索引键。
在这里插入图片描述

三层B+树的存储计算:

叶子节点: 第三层为叶子节点,每个叶子节点页可存储16条数据记录(16KB÷1KB)。
第二层(中间层): 假设每个指针6字节和索引键(一般为bigint)的大小为8字节,那么每个中间节点页可以指向1170个叶子节点【16KB转成字节需要乘以1024,因此(161024÷(6+8)宇节)=1170】。
第一层(根节点): 根节点
可以指向1170个中间节点。
由此,三层B+树大致能存储的数据总量为:1170117016=21902400,一棵三层的B+树在MySQL中可以存储大约2000万条记录。

http://www.dtcms.com/a/332340.html

相关文章:

  • 数据资产运营——解读 167页 2025 县域数据资产运营蓝皮书【附全文阅读】
  • 5G工业一体机汽车零部件工厂的无纸化管理
  • [激光原理与应用-285]:理论 - 波动光学 - 无线电磁波的频谱分配
  • [激光原理与应用-286]:理论 - 波动光学 - 不同频段电磁波的特点与差异性
  • 局部变量与全局变量的关系及应用
  • 46.Sentinel规则持久化
  • FreeRTOS中断服务程序(ISR)详细讲解
  • 从ChatGPT到智能助手:Agent智能体如何颠覆AI应用
  • 基于uiautomation的自动化流程RPA开源开发演示
  • 机器学习——PCA(主成分分析)降维
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
  • 【GUI】ssh实现gui本地可视
  • 公司的服务器怎么个事,服务器是什么东西
  • 系统思考:情绪内耗与思维模式
  • 开源长期记忆 短期记忆 框架调研对比19999字
  • 4.4 vue3生命周期函数
  • 解决在uniapp真机运行上i18n变量获取不到问题
  • Vue2与Vue3生命周期函数全面解析:从入门到精通
  • 【测试用例】
  • Qt 常用控件 - 9
  • 小兔鲜儿-小程序uni-app(二)
  • 手机端的音视频界面或者图片文档界面共享给大屏
  • 从源码到可执行文件:hello.c 的二进制之旅
  • Java项目基本流程(四)
  • 基于阿里云音频识别模型的网页语音识别系统实现
  • 人工智能与社会治理:从工具到生态的范式重构
  • spring中异步任务注解@Async和@scheduled的使用
  • Redis核心应用场景及代码案例
  • 璞致fpga Zynq UltraScale Plus RFSoC PZ-ZU47DR 核心板与开发板用户手册