MySQL 常见面试题总结:索引 InnoDB索引 MyISAM索引

news2024/11/20 19:31:45

1.关系型数据库(MySQL)和非关系型数据库(nosql)区别

存储方式:关系型以表的形式 非关系型以键值对形式

应用场景:关系型一致性要求较高,非关系型并发性要求较高

2. Mysql如何实现的索引机制?

MySQL中索引分三类:B+树索引、Hash索引、全文索引

Hash辅助查询 系统自动生成

3. InnoDB索引与MyISAM索引实现的区别是什么?

InnoDB中包含聚簇索引  MyISAM都是非聚簇索引(以非主键列作为搜索条件)

InnoDB 数据和索引存储在一起  ;MyISAM 索引和数据分开存储

因此在进行查询时InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录,而在MyISAM中却需要进行一次回表操作(根据查询到的主键 去聚簇索引中查找对应值)

4.一个表中如果没有创建索引,那么还会创建B+树吗?

如果有主键会创建聚簇索引

如果没有主键会生成rowid作为隐式主键

5. 聚簇索引与非聚簇索引b+树实现有什么区别?

5.1聚簇索引:

  1. 数据和索引存储在一个B+树
  2. 页内的记录是按照主键的大小顺序排成一个单向链表 。
  3. 页和页之间也是根据页中记录的主键的大小顺序排成一个双向链表 。
  4. 非叶子节点存储的是记录的`主键+页号`。
  5. 叶子节点存储的是`完整的用户记录`。

优点:

  1. 数据访问更快 ,因为索引和数据保存在同一个B+树中,因此从聚族索引中获取数据比非聚族索引更快。
  2. 聚簇索引对于主键的排序查找和范围查找速度非常快
  3. 按照聚簇索引排列顺序,查询显示一定范围数据的时候,由于 数据都是紧密相连,数据库可以从更少的数据块中提取数据,节省了大量的IO操作。

缺点

  1. 插入非自增数据比较麻烦 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能.因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。
  2. 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于lnnoDB表,我们一般定义 主键为不可更新。
5.2非聚簇索引

(二级索引、辅助索引)

聚族索引,只能在搜索条件是主键值时才发挥作用,因为B+树中的数据都是按照主键进行排序的,如果我们想以别的列作为搜索条件,那么需要创建非聚簇索引

不同:

叶子节点存储的并不是完整的用户记录,而只是c2列+主键这两个列的值;

查询到对应主键后再去另一个聚簇索引找;

一张表可以有多个非聚簇索引;

聚簇索引优点:

聚簇索引范围,排序查找效率高,因为是有序的;

非聚簇索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据

非优点:

1.相对于聚簇索引 非聚簇索引避免全表扫描

2.聚簇索引插入新值比采用非聚簇索引插入新值的速度要慢很多,因为插入要保证主键不能重复

6.使用B+树存储的索引crud执行效率如何?

新增 删除 稍微麻烦 查找修改 特别方便

7. 索引的优缺点是什么?

优点:

顺序读写更快

范围快速查找

缺点

占用空间:每一个索引都会创建一个B+  B+树的每个页都会占用16KB

8. 什么是覆盖索引?

覆盖索引方法:将被查询的字段,建立到联合索引里去

age,name -> index

select age from user where age >20 and name like"%" ; age,name覆盖了查询的age

优点:

覆盖索引不会回表查询,查询效率也是比较高的

9. 为什么要回表查询?直接存储数据不可以吗?

为了控制非聚簇索引的大小; ( 非聚簇索引如果也存储数据 数据会多拷贝一份 且在修改的时候也会多一倍 IO会变高)

10. 什么是联合索引,组合索引,复合索引?

为c2和c3列建立联合索引,如下所示:

c2,c3 - > index

where c2=? and c3=?; 全职匹配

where c2=?; 最左前缀 或者C2

where c3=? ; 不可查 因为需要先C2在C3

11.什么是唯一索引?

唯一索引:索引列值必须唯一,允许有NULL值,且NULL可能会出现多次。

与聚簇索引区别:聚簇索引不允许为空

12.什么时候使用唯一索引?

业务需求唯一字段的时候,一般不考虑性能问题(学号 身份证号)

13.什么时候适合创建索引,什么时候不适合创建索引?

适合创建索引

  1. 频繁作为where条件语句查询字段
  2. 关联字段需要建立索引
  3. 排序字段可以建立索引
  4. 分组字段可以建立索引(因为分组前提是排序)
  5. 统计字段可以建立索引(如.count(),max()

不适合创建索引

  1. 频繁更新的字段不适合建立索引
  2. where,分组,排序中用不到的字段不必要建立索引
  3. 可以确定表数据非常少不需要建立索引
  4. 参与mysql函数计算的列不适合建索引

创建索引时避免有如下极端误解:

1)宁滥勿缺。认为一个查询就需要建一个索引。

2)宁缺勿滥。认为索引会消耗空间、严重拖慢更新和新增速度。

3)抵制惟一索引。认为业务的惟一性一律需要在应用层通过先查后插方式解决。

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

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

相关文章

WAF入侵防御系统标准检查表

软件开发全文档获取:进主页

『Linux升级路』基础开发工具——vim篇

🔥博客主页:小王又困了 📚系列专栏:Linux 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、vim的基本概念 📒1.1命令模式 📒1.2插入模式 &…

ENVI IDL:如何监测代码运行时间(计时器函数实现)?

01 预想 我预想的是在循环中加入一个函数,可以监测相邻两次循环的运行时间,正常操作如此: pro unknowfor ix 0, 5 do beginstart_timekeeping systime(1)wait, randomu(systime(1), 1) ; 此处systime(1)仅仅作为seed种子end_timekeeping…

C# DirectoryInfo类的用法

在C#中,DirectoryInfo类是System.IO命名空间中的一个类,用于操作文件夹(目录)。通过DirectoryInfo类,我们可以方便地创建、删除、移动和枚举文件夹。本文将详细介绍DirectoryInfo类的常用方法和属性,并提供…

拥抱中国发展新机遇,原知因制药再次亮相2023进博会

11月5日至10日,第六届进博会在国家会展中心(上海)成功举办。作为世界上首个以进口为主题的国家级博览会,进博会成为构建新发展格局的窗口、高水平开放的载体,持续为世界经济注入正能量。 原知因制药再次亮相进博会&am…

开放领域问答机器人1

开放领域问答机器人是一种智能机器人,它不受限制,可以回答任何问题。这种机器人主要通过自然语言处理技术来理解用户的问题,并从大量的数据中获取相关信息,以提供准确的答案。它的应用领域广泛,包括客户服务、教育、医…

网易云音乐未登录接口返回301

网易云音乐 NodeJS 版 API (neteasecloudmusicapi.js.org) 上面是网易云音乐的官方API接口文档 当我调用接口发送请求的时候部分接口数据是需要登录之后进行获取的,但是当我发送请求的时候原生js项目中的跨端问题是比较难解决的。 遇到的问题:跨端请求…

嵌入式Linux系统中内存分配详解

Linux中内存管理 内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处: 1、 用户进程可以直接操作内核对应的内存,破坏…

拓世法宝AI智能直播一体机,快速搭建品牌矩阵,开启扩张新里程

时光荏苒,数字时代悄然而至,短视频已成为品牌传播的新宠。在这个潮流中,短视频以一种无法阻挡的势头成为了品牌传播的新趋势。如何巧妙地利用短视频进行品牌传播,实现零成本的品牌升级,构建强大的品牌矩阵,…

Linux编辑器---vim的使用

Vim是一个高度可配置的文本编辑器,它是操作Linux的一款利器,旨在高效地创建和更改任何类型的文本。这款编辑器起源于"vi",并在此基础上发展出了众多新的特性。Vim被普遍推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来…

【每日OJ—— 206. 反转链表(链表)】

每日OJ—— 206. 反转链表(链表) 1.题目:206. 反转链表(链表)2.方法讲解:2.1解法:2.1.1.图文解析2.1.2.代码实现2.1.3.提交通过展示 1.题目:206. 反转链表(链表&#xff…

WPS的JS宏基础(二)——其他

数据的输入和输出 InputBox(‘请输入内容’) //输入框 alert(‘a’) //简单消息框 MsgBox(‘b’) //进阶消息框 Debug.Print(‘c’) //立即窗口 Console.log(‘d’) //立即窗口 编写规则与注释 1.严格遵循大小写规范 2.每条语句之间用分号分隔 3.复合语句块(块中…

uni.getLocation() 微信小程序 线上获取失败

开发版,体验版,用此方法都可以正确获取定位,但是在小程序的线上,总是获取失败 参考:uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权-CSDN博客 uniapp 中的 uni.…

[sd_scripts]之fine_tune

https://github.com/kohya-ss/sd-scripts/blob/main/docs/fine_tune_README_ja.mdhttps://github.com/kohya-ss/sd-scripts/blob/main/docs/fine_tune_README_ja.md fine-tune微调是指使用图像和文本对来训练模型,不包括lora、textual inversion和hypernetwork。 …

JavaFX03(首页搭建)学生管理业务逻辑老师管理登录注册

数据库脚本 --创建学生管理系统 create database db_school; --使用当前数据库 use db_school; --创建学生表 create table tb_stu(sid int primary key identity(1,1),sname varchar(50),spwd varchar(50),ssex varchar(10),sage int,shobby varchar(100),saddress varchar(1…

STM32H743XX/STM32H563XX芯片烧录一次后,再次上电无法烧录

近期在使用STM32H563ZIT6这款芯片在开发板上使用正常,烧录到自己打的板子就遇到了芯片烧录一次后,再次上电无法烧录的问题。 遇到问题需要从以下5点进行分析。 首先看下开发板的原理图 1.BOOT0需要拉高。 2.NRST脚在开发板上是悬空的。这里我建议大家…

前端 a链接 如何实现下载功能

目录 前言 标签 download a 标签链接下载的实现 1. 整体流程 2. 实现步骤 3. 类图 4. 代码示例 download 使用注意点 1. 同源 URL 的限制 2. 不能携带 Header Blob 转换 方法1. 用作 URL(blob:) 方法2. 转换为 base64(data:&…

[C++随笔录] 红黑树

红黑树 红黑树的特点红黑树的模拟实现红黑树的底层结构insert的实现实现思路更新黑红比例的逻辑insert的完整代码 insert的验证 源码 红黑树的特点 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是 Red或 Black。…

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium? Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用…

实现跨域必须要知道的知识点

目录 同源策略 cookie iframe和多窗口通信 片段识别符 window.postMessage() LocalStorage Storage接口: 概述 属性和方法 Storage.setItem() Storage.getItem() Storage.removeItem() Storage.clear() Storage.key() storage 事件 同源策略 浏览器…