mysql高频面试题

1. mysql里的索引类型

在这里插入图片描述

2. 聚簇索引和非聚簇索引的区别

在这里插入图片描述

  • 聚簇索引适合场景:
    • 主键、唯一性要求高的字段。
    • 需要对数据进行范围查询时。
    • 对数据的读取频繁,并且数据行的插入和删除较少时。
  • 非聚簇索引适合场景:
    • 较多的查询条件,或者需要基于某些非主键字段进行查询时。
    • 需要创建多个索引来优化不同的查询条件。
    • 需要增加查询速度,但数据插入、删除操作频繁时。
      在这里插入图片描述
  1. AB, id, name, 查出A表中存在,在B表里不存在的所有数据

select * from A left join B on A.name= B.name WHERE B.name IS NULL ;

SELECT  A.id, A.name
FROM  A
WHERE  NOT  EXISTS  (SELECT  1FROM  BWHERE  A.id =  B.id
);

3. Mysql锁的机制了解吗?

  • 全局锁:

  • 表级锁:

    • 表锁
    • 元数据锁
    • 意向锁
    • Auto-INC 锁
  • 行级锁

    • Record 锁
    • Gap 锁
    • Next-Key Lock

4. 假设我有一个千万级的数据表,我要在生产环境下加索引

5.1 使用 ONLINE 选项(如果支持)

  • MySQL 5.6 及以上版本支持使用 ONLINE 选项创建索引,可以在不锁定表的情况下创建索引。这有助于避免对查询和插入的干扰。

CREATE INDEX idx_column_name ON table_name (column_name) ONLINE;

5.2 分批次创建索引

如果表非常大,可以考虑分批次创建索引。假设表的数据分布有一定规律,可以将数据分成多个部分,逐步进行索引创建。

步骤:

  • 可以通过分区表(Partitioning)或根据某些条件(如日期、范围)选择性地创建索引。
  • 创建索引时使用 ALGORITHM=INPLACE,可以减少表的锁定时间。

5.3 低流量时段执行索引创建

在生产环境中,通常有低流量时段。可以通过定时任务在低峰期执行索引创建。

5.4 逐步添加索引

对于已经有索引的大表,逐步添加索引可以避免一次性创建多个索引造成的负载过高。每次添加一个索引后,评估系统性能,确保没有重大性能瓶颈后再添加下一个。

5.5 使用 pt-online-schema-change 工具

Percona Toolkit 提供的 pt-online-schema-change 工具可以在不中断服务的情况下安全地对表结构进行更改(如创建索引)。该工具通过创建一个新的表来实现更改,并通过触发器同步数据,这样对生产环境的影响较小。

pt-online-schema-change --alter “ADD INDEX idx_column_name (column_name)” D=your_db,t=your_table --execute

5. 千万级表,保证性能的前提下,才能保证sql是否用到索引。

1. 确保查询语句使用索引

1.1 条件多个时,使用覆盖索引

覆盖索引(Covering Index)是指查询中的所有字段都可以通过索引来访问,而不需要回表(即不需要再访问数据表中的行)。如果查询能够通过索引覆盖完成,它的性能会非常高。

覆盖索引的前提:索引包含了所有查询字段,包括 SELECT 中的字段、WHERE 条件中的字段、JOIN 语句中的字段、ORDER BY 排序的字段等。

CREATE INDEX idx_column1_column2 ON your_table (column1, column2);

SELECT column1, column2 FROM your_table WHERE column1 = ‘value1’ AND column2 = ‘value2’;

column1 和 column2通过覆盖索引就能完成查询,而不需要访问表中的实际数据行。

1.2 使用合适的索引

确保查询条件中的字段有相应的索引。常见的情况包括:

  • WHERE 子句中经常查询的字段。
  • JOIN 连接条件中的字段。
  • ORDER BY 排序的字段。
  • GROUP BY 聚合的字段。

你可以根据实际的查询情况,使用单列索引或复合索引。复合索引尤其有效于多条件查询。

2. 验证查询是否使用索引 - EXPLAIN

使用 EXPLAIN(或 EXPLAIN ANALYZE)来分析查询的执行计划,查看查询是否有效使用了索引。

2.1 使用 EXPLAIN

EXPLAIN SELECT column1, column2 FROM your_table WHERE column1 = ‘value1’ AND column2 = ‘value2’;

+----+-------------+------------+--------+----------

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

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

相关文章

每日一练 | 时延和抖动

01 真题题目 关于时延和抖动,下面描述正确的是(多选): A. 端到端时延等于处理时延与队列时延之和 B. 抖动是因为每个包的端到端时延不相等造成的 C. 抖动的大小跟时延的大小相关,时延小则抖动的范围也小,时…

MySQL第二弹----CRUD

笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:MySQL 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ 一、修改表 使用ALTER …

c++解决常见内存泄漏问题——智能指针的使用及其原理

目录 前言: 1. 智能指针的使用及其原理 1. 1 智能指针的使用场景分析 1.2 RAII和智能指针的设计思路 1.3 C标准库智能指针的使用 1.3 1 auto_ptr 1.3 2 unique_ptr 1.3 3 shared_ptr(重) 1.3 4 weak_ptr 1.3 5 模拟实现删除器 2.智能指针的原…

NVR管理平台EasyNVR设备通过ONVIF接入出现404访问错误是什么原因?

如今,视频监控在各行各业都得到了广泛应用,成为现代社会不可或缺的一部分。随着技术的不断进步,视频监控系统已经从传统的模拟监控发展到高清化、网络化和智能化阶段,其应用领域也从最初的安防扩展到智慧城市、智能家居、交通管理…

【python中级】 控制文件大小的简易日志

【python中级】 控制文件大小的简易日志 1.背景2.简单版本3.复杂实现1.背景 日志(Log)在软件开发和运行中扮演了重要的角色,主要用于记录系统运行过程中的事件和状态信息。日志的核心作用是记录、分析和追踪,不仅对开发者和运维人员有用,还能为用户体验、安全性和业务决策…

Apollo中间件技术:从入门到精通

一、引言 在Java开发的微服务架构中,配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化,传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,成为…

SPI扩展类与普通bean类的区别

SPI 扩展类 和 普通 Bean 类 在 Java 和 Spring 生态中有不同的设计目的和使用场景。以下是它们的核心区别: 1. 设计目的 SPI 扩展类 目的:SPI(Service Provider Interface)是 Java 提供的一种服务发现机制,用于实现插…

CANape 新建工程和连接

文章目录 简介1、新建工程1.1 打开 CANape1.2 新建工程1.3 新建 Device1.3.1 添加NEW DEVICE1.3.2 添加 NEW From Database1.4 配置 Memory Segment1.5 新建trace窗口和观测窗口 2、硬件连接2.1 更改与canape盒子通道一致的通道编号,选择驱动配置2.2 选择硬件配置 问…

[Qt] Qt介绍 | 搭建SDK

目录 1. Qt 简介 什么是 Qt? 1.1 引入 1.2 GUI 1.3 Qt 介绍 2. Qt 发展史 3. Qt 支持的平台 4. Qt 版本信息 5. Qt 的优点 6. Qt 应用场景 7. Qt 成功案例 8. Qt 发展前景及就业分析 二. Qt 开发环境搭建 1. 开发工具概述 2.Qt SDK 安装 3.使用 1. …

[Excel] CONCATENATE TEXT

在Excel中组合日期格式的数据并保留其样式,可以通过以下几种方法实现: 方法一:使用TEXT函数和CONCATENATE函数(或&符号) TEXT函数:用于将日期转换为指定格式的文本。 语法:TEXT(value, for…

ES 磁盘使用率检查及处理方法

文章目录 1. 检查原因2. 检查方法3. 处理方法3.1 清理数据3.2 再次检查磁盘使用率 1. 检查原因 磁盘使用率在 85%以下,ES 可正常运行,达到 85%及以上会影响 PEIM 数据存储。 在 ES 磁盘分配分片控制策略中,为了保护数据节点的安全&#xff0…

python Celery 是一个基于分布式消息传递的异步任务队列系统

Celery 是一个基于分布式消息传递的异步任务队列系统,主要用于处理耗时任务、定时任务和周期性任务。它能够将任务分配到多个工作节点(Worker)上执行,从而提高应用程序的性能和可扩展性。Celery 是 Python 生态中最流行的任务队列…

NLP自然语言处理——使用飞桨实现基于LSTM的情感分析

任务说明: 通过对电影评论历史数据分析,构建深度学习分类模型,最终完成对新的数据样本的识别分类。 任务要求: 运用神经网络算法,创建、训练、评估模型,完成对电影评论的情感分类任务。 数据集说明&#xf…

LabVIEW条件配置对话框

条件配置对话框(Configure Condition Dialog Box) 要求:Base Development System 当右键单击**条件禁用结构(Conditional Disable Structure)**并选择以下选项时,会显示此对话框: Add Subdiagr…

K8S-LLM:用自然语言轻松操作 Kubernetes

在 Kubernetes (K8s) 的日常管理中,复杂的命令行操作常常让开发者感到头疼。无论是部署应用、管理资源还是调试问题,都需要记住大量的命令和参数。Kubernetes 作为容器编排的行业标准,其强大的功能伴随着陡峭的学习曲线和复杂的命令行操作。这…

为什么MoE推理效率更高:精简FFN

MoE全称是“混合专家”,它由多个专家网络和一个门控网络组成……整个MoE完全复用了Transformer的结构,只是将其中的FFN层替换成了MoE层。MoE层里的门控网络其实就是个专家分类器,每次根据输入Token生成专家的概率分布,然后选择排序靠前的K个专家进行Token处理,最后再将K个…

线段树例题题解

卫星覆盖(NOI1997) 题面: SERCOI(Space-Earth Resource Cover-Observe lnstitute) 是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星 -SERCOI-308。这种卫星可以…

uni-app开发-识图小程序-主要功能以及首页实现

目录 一:功能介绍 二:代码实现 一:功能介绍 识图小程序首页主要是识图类型的展示列表,目前只有四种类型的图像识别,分别是车牌,发票,电表,身份证。可以分别识别车牌号码,身份证号码,发票号码,和电表度数。点击对应的类型图标会跳转到识图页面,每个分类上面展示该…

超详细!一文搞定PID!嵌入式STM32-PID位置环和速度环

本文目录 一、知识点1. PID是什么?2. 积分限幅--用于限制无限累加的积分项3. 输出值限幅--用于任何pid的输出4. PID工程 二、各类PID1. 位置式PID(用于位置环)(1)公式(2)代码使用代码 2. 增量式…

STM32 SPI读取SD卡

七个响应类型: R1 Response (Normal Response): R1响应是最基本的响应,包含一个字节的状态位,用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…