深度思考mysql面经

推荐

1 索引下推

Mysql性能优化:什么是索引下推?

1.1 定义

索引下推(Index Condition Pushdown,简称 ICP)是一种数据库优化技术。在传统的数据库查询中,数据库首先使用索引检索来找到符合索引条件的行,然后将这些行的数据从存储引擎中读取到内存,接着再过滤掉不满足其他WHERE子句条件的行。而在索引下推技术中,某些可以被下推的过滤条件被应用在索引扫描阶段,即在从存储引擎取数据之前,从而避免了取出不必要的行。

1.2 建议参考推荐文章中的例子

2 mysql的b+树一般是几层

2到3层就可以,一个节点存储的数据量是一页(理解这一点很重要),一页默认是16KB,假设主键是int类型,那么一个节点能存储key的数量(161024)÷(4+6)=1638,6B是指针的大小,那么三层B+树,叶子节点的数量就有16381638=2683044个,每个节点是一页,假设一行数据是1KB,那么一个节点能存16行数据,所以3层B+树总共能存储的数据量是2683044*16=42928704行。

2 mysql的大小表前后顺序对inner join的效率有影响吗?

mysql的大小表前后顺序对inner join的效率有影响吗?

3 为什么MySQL索引要使用B+树,而不是B树或者红黑树?

  • 范围查询效率: B+树的叶子节点之间通过指针连接,这使得范围查询更加高效。当需要进行范围查询时,B+树可以从范围的起始点开始,在叶子节点层顺序读取数据,直到范围的结束点。而在B树中,范围查询可能需要在多个层级中进行遍历。

  • 查询稳定性: B+树查询的性能更加稳定。由于所有的数据都位于B+树的叶子节点,每次查询(无论命中还是未命中)所需要遍历的路径长度都大致相同。而B树由于数据分布于各个节点,查询的路径长度可能会有所不同。

  • 空间利用率: 由于B+树非叶子节点不存储数据,只存储键和子节点指针,因此每个节点可以存储更多的键。这使得B+树的分支因子更大,树的高度更低。

  • 红黑树: 红黑树是一种自平衡的二叉搜索树,用于保证在最坏的情况下,树的高度不超过2*log(n)。但是在数据库中,由于数据存储在磁盘上,我们更关心磁盘I/O次数,而非比较次数。B+树因其高的分支因子,对于磁盘I/O进行了优化,通常在查找时会比红黑树产生更少的磁盘I/O。

4 关于B树和B+树的高度:

一般一个B+树节点占用一个页面,如果一个B树的节点也占用一个页面,因为B树的非叶节点存储了数据,那么一个页面能存储的B树的分支数更少,所以理论上B树更高对不对?

你是对的,如果B树的非叶子节点也存储数据,并且一个节点限制为一个页面的大小,那么B树每个节点能存储的子节点数确实会比B+树少。这也意味着B树的高度可能会比B+树更高。

但是,B树的一个节点可以存储更多的数据(因为非叶子节点也存数据)。如果我们只看数据存储的能力,B树可能更加高效。但是,正如前面所述,B+树对于范围查询、稳定的查询性能、以及空间利用率方面都有优势。这些优势使得B+树更适合用于数据库索引。

总的来说,选择B+树作为MySQL的索引结构并不仅仅是基于树的高度或者一个节点可以存储的数据量,而是基于其在多个方面的综合性能优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集成测试最全详解,看完必须懂了

目录 什么是集成测试 测试关注的重点 集成测试的三个级别 集成测试的模式 集成测试策略 自顶向下集成(Top-Down Integration) 三明治集成(Sandwich Integration) 基干集成(Backbone Integration) …

解决Windows:Call to undefined function exif_imagetype()

很明显,是php安装时没有打开某些扩展,以致不能执行exif_imagetype()这个方法,因此需要打开。 网上很多人说需要打开下面这两个扩展: extension=php_exif.dll extension=php_mbstring.dll 但只说对了一半,我一开始也按照网上文章说的打开这两个扩展,但是还是同样错误。…

23.8.8 杭电暑期多校7部分题解

1008 - H.HEX-A-GONE Trails 题目大意 有两个玩家和一棵树,初始状态玩家一和玩家二分别在两个点 x , y x,\space y x, y,每次操作可以走一个与当前点有连边并且双方都没走到过的点,问最后是谁赢 解题思路 因为不能走走过的点&#xff0c…

[Vulnhub] matrix-breakout-2-morpheus

目录 <1> 信息收集 <2> getshell <3> Privilege Escalation&#xff08;提权&#xff09; <1> 信息收集 nmap -sP 192.168.236.0/24 扫描一下靶机ip 靶机ip: 192.168.236.154 nmap -A -p 1-65535 192.168.236.154 扫描一下靶机开放哪些服务 开放…

PyQt学习笔记-Windows系统版本兼容问题踩坑记录

1 Pyinstaller打包的exe在Win10上可以使用&#xff0c;在Win7上缺提示找不到dll。 错误信息&#xff1a; Traceback (most recent call last): File "main.py", line 4, in <module> ImportError: DLL load failed while importing QtWidgets: 找不到指定的…

2023全新UI好看的社区源码下载/反编译版

2023全新UI好看的社区源码下载/反编译版 这次分享一个RuleAPP二开美化版&#xff08;尊重每个作者版权&#xff09;&#xff0c;无加密可反编译版本放压缩包了&#xff0c;自己弄吧&#xff01;&#xff01;&#xff01; RuleAPP本身就是一款免费开源强大的社区&#xff0c;基…

海外应用商店优化实用指南之元数据的迭代更新

随着每天都有新应用程序加入App Store和Google Play商店&#xff0c;许多应用程序都会针对与我们相同的关键词&#xff0c;虽然我们的元数据保持不变&#xff0c;但竞争对手的应用会重新编入索引&#xff0c;最终导致我们的关键词排名随着时间的推移稳步下降。 1、迭代的重要性…

C语言——九九乘法表

//九九乘法表 //用程序做一个九九乘法表 #include<stdio.h> int main() {int i,j,result;printf("\n");for(i1;i<10;i){for(j1;j<i;j){resulti*j;printf(" %d*%d%-d",i,j,result);}printf(" \n");}}

React Router@3.x 升级到 @6.x 的实战

一、概述 目前公司产品有关 react 的工具版本普遍较低,其中react router版本为 3.x(是的,没有看错,3.x 的版本,4年前的版本)。而最新的 react router 已经到了 6.x 版本。 为了能够跟上路由的脚步,也为了使用 router 相关的 hooks 函数,一次必不可少的升级由此到来!由于…

获取当前线程中的请求属性的静态方法

RequestContextHolder.getRequestAttributes() 是 Spring 框架中用于获取当前线程中的请求属性的静态方法。它通常在 Web 应用中使用&#xff0c;用于访问当前请求的上下文信息。在 Spring 的 Web 应用中&#xff0c;每个请求都会有一个对应的请求上下文&#xff0c;其中包含了…

【数据库】P0 创建数据库环境 MySQL + DataGrip

创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可&#xff0c;本博文将讲述简约安装步骤&#xff1b; 如需详细安装步骤可见&#xff1a;https:/…

4.1、Flink任务怎样读取集合中的数据

1、API说明 非并行数据源&#xff1a; def fromElements[T: TypeInformation](data: T*): DataStream[T] def fromCollection[T: TypeInformation](data: Seq[T]): DataStream[T] def fromCollection[T: TypeInformation] (data: Iterator[T]): Data…

【设计模式】观察者模式

什么是观察者模式&#xff1f; 观察者模式&#xff08;又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;属于行为型模式的一种&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态…

leetcode做题笔记64

给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 思路一&#xff1a;动态规划 int minPathSum(int** grid, int gridSize, int* gridColSi…

STM32 CubeMX USB_MSC(存储设备U盘)

STM32 CubeMX STM32 CubeMX USB_MSC(存储设备U盘&#xff09; STM32 CubeMX前言 《使用内部Flash》——U盘一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择FATFS功能 二、代码部分修改代码"usbd_storage_if.c"修改代码"user_diskio.c"main函数初始化插…

杭州企业可以用DV https证书吗

DV https证书是入门级的https证书&#xff0c;也可以叫DV基础型https证书&#xff0c;这款https证书企业是可以用的&#xff0c;甚至商城网站、金融网站都可以使用&#xff0c;不限制申请者&#xff0c;个人或者企事业单位都可以申请。DV基础型https证书虽然只是入门级的https证…

全开源跨境电商一键铺货货源平台--后台数据采集功能

数据库设计在设计数据库时&#xff0c;需要考虑到以下信息&#xff1a; 货源信息&#xff1a;包括货源标题、价格、描述、图片等信息。 用户信息&#xff1a;包括用户名、密码、邮箱、电话等信息。 订单信息&#xff1a;包括订单号、用户信息、货源信息、支付信息等。 支付信息…

idea中提示Unsupported characters for the charset ‘ISO-8859-1‘

application.properties中文注释拉黄线 &#xff0c;提示Unsupported characters for the charset ISO-8859-1 解决办法&#xff1a; 注意&#xff1a; 改完之后之前输入的中文就变成“ &#xff1f;&#xff1f;&#xff1f;”了&#xff0c;建议备份一下 1、打开setti…

use erlang

启动 erl说明 .结尾一个语句 -module(geometry). %模块声明&#xff0c;模块名必须与文件名相同。 -export([area/1]). %导出声明&#xff0c;声明可以外部使用的函数 area({rectangle, Width, Height}) -> Width*Height; %子句1 area({square, Side}) -> Side * Side…

QT5.12在windows上边的安装

使用国内镜像源在线安装QT(2023.3.25更新)_qt国内镜像_Iotfsd的博客-CSDN博客 先下载 STEP1&#xff1a;下载qt online installer Index of /official_releases/online_installers (qt.io) STEP1&#xff1a;使用国内镜像源在线安装Qt qDPass(12MB/s) 在《STEP1》下载的…