MySQL面试问题(二)

devtools/2024/9/20 4:04:04/ 标签: mysql, 面试, 数据库

MySQL面试问题(二)

文章目录

    • MySQL面试问题(二)
      • 为什么要使用索引
      • 索引是不是越多越好
      • MySQL索引机制
      • 什么是聚簇索引
      • 没有主键innodb如何处理
      • 联合索引
      • 批量向MySQL中导入1000w数据如何优化
      • 分页时偏移量很大效率很差如何优化
      • 大数据量高并发访问数据库优化方法

为什么要使用索引

  1. 索引减少了存储引擎需要扫描的数据量。
  2. 帮助我们进行排序,避免使用临时表。
  3. 索引可以将随机IO转换为顺序IO。

索引是不是越多越好

  1. 索引越多,更新的速度越慢。索引会增加数据库写入操作的成本,innodb使用插入缓存,把多次插入合并成一次插入进行优化。
  2. 太多的索引会影响mysql查询优化器的选择时间。
  3. 更多的索引需要更多的空间。

MySQL索引机制

  1. 索引本质上是一个优化查询的数据结构比如B+树,可以优化查询效率。索引一般以文件的形式存储在磁盘上,索引检索需要磁盘IO操作,评价一个数据结构作为索引的优劣重要的指标就是在查找过程中磁盘IO操作次数的渐进复杂度。当数据存储在磁盘类存储介质上时,它是作为数据块存放。这些数据块被当做一个整体来访问,可以保证操作的原子性。磁盘数据块类似于链表结构,包含数据部分和指向下一个节点的指针,不需要连续存储,所以没有索引则检索过程变成了顺序查找。

什么是聚簇索引

  1. 聚簇索引是按照表的主键构造一棵B+树,同时叶子节点存放的就是行记录数据,聚簇索引的叶子节点也称为数据页。这个特性决定了索引组织表中数据也是索引的一部分。
  2. 由于聚簇索引的索引页面指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。
  3. 每张表只能建一个聚簇索引,并且建聚簇索引需要相当于该表120%的附加空间来存储该表的副本和索引中间页。

没有主键innodb如何处理

  1. MySQL的innodb引擎本身存储的形式必须是聚簇索引的形式,在磁盘上树状存储,但是不一定是根据主键聚簇。如果有主键,主键就是聚簇索引。没有主键的情况下,第一个非空的唯一索引就是聚簇索引。如果都没有,那么就是有一个隐藏的rowid即行ID作为聚簇索引。

联合索引

  1. 联合索引的选择原则是最左匹配原则、离散度高原则、最少空间原则。最左匹配原则,经常用的列优先。离散度高原则,选择离散度高的列优先,列的离散性越高,选择性越好。最少空间原则,宽度小的列优先。

  2. 联合索引的作用有减少开销、覆盖索引和效率高。建一个联合索引,相当于建立了多个索引,每多一个索引都会增加写操作和磁盘空间的开销,对于大数据量的表,使用联合索引会大大减少开销。使用联合索引,可以利用索引覆盖,无需回表,减少随机IO操作。索引列越多,通过索引筛选出的数据越少,效率越高。

批量向MySQL中导入1000w数据如何优化

  1. 批量录入数据,手动开启事务、手动提交。
  2. 批量SQL
insert into tab_name() values();
-- 多条数据录入,带有缓存,单条SQL不要录入过多的数据,通常不超过10M
insert into tab_name() values(),();
  1. 数据库配置

    配置SQL批处理缓存、IO缓存、是否记录binlong。

  2. 通过csv或者txt文件做本地导入,mysql import xxx文件。

  3. 代码及开发,batch批处理,多次访问数据库,批量写入。

  4. 索引会降低写效率。建表时,先不创建索引,当数据相对趋于稳定或正式发布时创建索引,先内存维护索引,索引内存空间不足,需要持久化到磁盘。

分页时偏移量很大效率很差如何优化

  1. MySQL分页时,并不直接查rows的数据,而是把offset和rows的数据全部都查出来,然后再将offset的数据扔掉,返回rows的数据。查询所有列导致回表,limit a, b会查询前a*b+b条数据,然后丢弃前a*b条记录。
  2. 可以使用覆盖索引和条件过滤的方式进行优化。

大数据量高并发访问数据库优化方法

  1. 数据库结构设计优化,比如优化数据模型,增加冗余减少数据库访问次数,优化查询SQL键索引等,增加批量查询。
  2. 分布式部署,增加主从配置,实现读写分离。
  3. 数据库分库分表、分区。
  4. 使用缓存和nosql,实现冷热数据分离。
  5. 更新存储介质,使用固态硬盘。

http://www.ppmy.cn/devtools/96888.html

相关文章

AI数字员工技能全开,招生、培训、写教案,样样都行

只需要几个AI数字员工,就可以协助您办一所高质量的学校。 教务管理、教师培训、招生咨询、家校沟通、学生评价、资料整理、学习伴侣、写教案、总结、学生评语等。 这些都可以用AI数字员工来完成。 比如,AI培训专员给教师做制度培训、教学培训&#xf…

模拟实现简单vector

vector作为STL成员之一&#xff0c;在实际中也使用广泛。所有了解实现一个简单的vector也有助于我们更好的认识vector及其底层实现。 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace cls {template<class T>class vecto…

ArcGIS Pro基础:状态栏显示栏的比例尺设置和经纬度位置

上图所示&#xff0c;界面下方最左侧是显示的比例尺&#xff0c;可以进行选择设置&#xff0c;也可以进行自定义设置 上图所示&#xff0c;可以手动录入比例尺&#xff0c;同时也可以对比例尺设置别名&#xff0c;比如【实验1】作为特定比例尺的标记 如上图所示&#xff0c;可以…

C语言实现排序之插入排序算法

一、插入排序算法 基本思想 插入排序的基本思想是将未排序的元素逐个插入到已排序的序列中。初始时&#xff0c;假设序列的第一个元素已经被排序。然后从第二个元素开始&#xff0c;将其插入到已排序的序列中的适当位置&#xff0c;使得已排序的序列仍然有序。 步骤 初始化&…

使用 Vue 2 搭建后台管理系统

随着前端技术的不断发展&#xff0c;Vue.js 已经成为了构建复杂单页应用的一个非常流行的选择。Vue 2 提供了一个简单但强大的框架&#xff0c;用于构建用户界面。本文将指导您如何利用 Vue 2 和相关技术栈来搭建一个后台管理系统。 vue2后台管理项目实例合集下载地址见最下方…

go语言设置定时任务

在 Go 语言中&#xff0c;可以使用 time 包来设置一个定时任务。下面是一个简单的示例&#xff0c;展示了如何在每天早上 9 点输出一条消息。 实现步骤 计算下一个执行时间&#xff1a;首先&#xff0c;计算当前时间与下一个目标时间&#xff08;比如每天的 9 点&#xff09;之…

高速信号的眼图、加重、均衡

目录 高速信号的眼图、加重、均衡眼图加重均衡线性均衡器CTLE判决反馈均衡器DFE 高速信号的眼图、加重、均衡 眼图 通常用示波器观察接收信号波形的眼图来分析码间串扰和噪声对系统性能的影响&#xff0c;从而估计系统优劣程度&#xff0c;因而眼图分析是高速互连系统信号完整…

docker、防火墙关闭仍然无法访问、防火墙命令

在用docker时&#xff0c;说要提前将防火墙关闭&#xff0c;因为要用到很多端口。但是我发现我把防火墙关闭后&#xff0c;我要访问端口依然失败。。。。 于是我把防火墙打开&#xff0c;要用到什么端口就放开这个端口就好了&#xff0c;但是放开端口后&#xff0c;要restart …

[Day 54] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

大綱 簡介 什麼是特徵工程為什麼特徵工程在機器學習中如此重要 特徵工程的基本步驟 特徵選擇特徵創建特徵轉換特徵縮放 特徵選擇技術 過濾法&#xff08;Filter Methods&#xff09;包裝法&#xff08;Wrapper Methods&#xff09;嵌入法&#xff08;Embedded Methods&#xff…

Kotlin 继承

Kotlin 继承 概述 Kotlin,作为一门现代编程语言,提供了对面向对象编程(OOP)的全面支持,其中包括继承这一核心概念。继承允许我们创建一个新的类(称为子类)来继承另一个类(称为父类)的属性和方法。这样,子类不仅能够复用父类的代码,还能在此基础上添加新的功能或重…

算法工程师第四十一天( 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II )

参考文献 代码随想录 一、每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 …

(React/Vue+BPMN.js)前端项目——BPMN工作流设计器

bpmn-process-designer: Base on Vue 2.x and ElementUI&#xff0c;基于 Bpmn.js、Vue 2.x 和 ElementUI 的流程编辑器&#xff08;前端部分&#xff09;&#xff0c;支持监听器&#xff0c;扩展属性&#xff0c;表单等配置&#xff0c;可自由扩展 dingding-mid-business-java…

<Linux>进程概念-下

文章目录 目录 前言 一、环境变量 1. PATH 2. HOME 3. 其他环境变量 系统调用接口--getenv 4. 命令行参数 4.1 双参数main 4.2 三参数main 5. 设置环境变量 5.1 本地环境变量 5.1.1 内建命令 5.2 固定环境变量 6. 取消环境变量 7. 小总结 二、程序地址空间 1. 空间划分 2. 进…

数据结构+图的基本应用

一、问题描述 求有向图的简单路径 编写一个程序&#xff0c;设计相关算法完成以下功能。 &#xff08;1&#xff09;输出如图所示的有向图 G 从顶点 5 到顶点 2 的所有简单路径。 &#xff08;2&#xff09;输出如图所示的有向图 G 从顶点 5 到顶点 2 的所有长度为 3 的简单…

工业三防平板在数字化工厂建设中的重要趋势

在当今数字化浪潮的冲击下&#xff0c;工厂建设的数字化转型已,成为不可逆转的趋势。而在这一进程中&#xff0c;工业三防平板正逐渐斩露头角&#xff0c;发挥着越来越重要的作用。随着工业4.0理念的不断深入&#xff0c;工厂对于生产效率、质量控制、管理精细化的要求越来越高…

工厂模式与策略模式在Java中的应用案例分析

工厂模式与策略模式在Java中的应用案例分析 在Java的设计模式中&#xff0c;工厂模式和策略模式都是非常常见且实用的模式。它们各自解决了不同的问题&#xff0c;在复杂的系统设计中&#xff0c;这两种模式往往会结合使用&#xff0c;以提升代码的灵活性、可维护性和扩展性。…

【Linux 从基础到进阶】SSH 服务安全配置

SSH 服务安全配置 引言 SSH(Secure Shell)是 Linux 系统中广泛使用的远程登录协议,为用户提供了安全的加密通信。由于其广泛应用,SSH 服务也成为潜在攻击的目标。因此,确保 SSH 服务的安全性至关重要。本文将介绍如何在 CentOS 和 Ubuntu 系统中对 SSH 服务进行安全配置…

第1章 初识C语言

第1章 初识C语言 1.1 C语言概述 1.1.1 C语言的发展历史 C语言的原型为ALGOL 60语言&#xff08;也称A语言&#xff09;。 1963年 剑桥大学将ALGOL 60语言发展成为GPL语言。 1967年 剑桥大学的Matin Richards简化GPL&#xff0c;产生了BGPL语言。 1970年 美国贝尔实验室的Ken…

SpringMVC学习中遇到的不懂注解记录

文章目录 Autowrite 和 ResourceQualifier 和 PrimaryPathVariableController、Service、Repository 和 Component Autowrite 和 Resource 我们先讲讲 Autowrite 注解 吧。 public class StudentService3 implements IStudentService {//Autowiredprivate IStudentDao studentD…

推送本地windows环境镜像到阿里云镜像仓库

说明&#xff1a;从dockerhub拉取了apache/kafka3.7.0镜像到本地windwos操作系统上&#xff0c;再将该镜像推送到阿里云镜像仓库&#xff0c;记录了本次操作过程。 1、启动本地的docker desktop&#xff0c;搜索官方镜像 将搜索到的apache/kafka官方镜像拉取到本地 镜像拉取…