MySQL基础知识(二)

news2024/9/27 7:24:21

MySQL索引与锁机制

1. 索引

1.1 什么是索引?

索引是数据库中用于优化查询性能的数据结构。它存储着满足特定查找的数据,并通过指针引用表中的数据,从而实现高效的数据访问。索引可以快速定位到所需的数据行,并避免全表扫描。

1.2 MySQL为何使用B+树?

  • 优点

    • 范围查询支持:B+树节点天然有序,适用于范围查询,无需全表扫描。
    • 覆盖索引:可以通过索引直接返回结果,而无需读取数据行,提高查询效率。
    • 左匹配机制:在复合索引中,可以利用前缀匹配原理,提高查询效率。
  • 与Hash索引的对比

    • Hash索引:底层使用哈希表,适用于等值查询,但对范围查询无效,需全表扫描。
    • B+树:支持范围查询和顺序访问,适合数据库索引。

1.3 B+树和B-树的区别

  • B-树

    • 所有键值存储在树的每个节点中。
    • 内部节点存储数据,导致查询复杂度不固定。
  • B+树

    • 所有关键字存储在叶节点,内部节点仅存储索引。
    • 每个叶节点增加指针,便于顺序遍历。
    • 查询时间复杂度为O(log n),更高效。

2. 何时创建索引

以下场景建议创建索引:

  1. 主键:主键自动建立唯一索引。
  2. 频繁查询的字段:经常作为查询条件的字段应创建索引。
  3. 外键关系:与其他表关联的字段建立索引。
  4. 多字段查询:倾向于创建组合索引。
  5. 排序字段:查询中涉及排序的字段使用索引可提高排序速度。
  6. 统计或分组字段:涉及统计或分组的字段应考虑索引。

3. 索引分类

  1. 主键索引:用于唯一标识记录。
  2. 唯一索引:确保值的唯一性。
  3. 复合索引:由多个字段组成的索引。
  4. 聚集索引与非聚集索引
    • 聚集索引:数据存储顺序与索引顺序一致。
    • 非聚集索引:数据存储顺序与索引顺序不一致。
  5. 全文索引:支持在MyISAM上,只能在特定类型数据(如CHAR、VARCHAR、TEXT)上使用。

4. 为什么使用B+树作为索引结构?

  • 低磁盘读写代价:B+树的内部节点较小,减少了与磁盘的IO次数,提升查询效率。
  • 顺序访问:数据存储在叶节点,方便进行顺序访问,可以一次性读取多个关键字。

5. MySQL的最左前缀原则与前缀原则

  • 最左前缀原则:复合索引时,查询条件应从左到右匹配,才能利用索引。
  • 前缀原则:索引列不参与计算,保持列“干净”,以便提高索引的使用效率。

5.1 建立索引的原则

  1. 最左前缀匹配原则
  2. 选择区分度高的列作为索引
  3. 索引列不能参与计算,保持列“干净”。
  4. 尽量扩展已有索引,而非新建索引。

6. 锁机制

6.1 共享锁与排他锁

  • 共享锁:允许多个事务同时读取数据,但不允许修改。
  • 排他锁:仅允许一个事务修改数据,其他事务无法读取或修改。

6.2 表级锁与行级锁

  • 表级锁:锁定整个表,其他事务无法访问,适合写操作不频繁的场景。
  • 行级锁:允许在表的不同行上并发操作,提高了并发性能。

6.3 乐观锁与悲观锁

  • 乐观锁:假设不会发生冲突,允许并发操作,在更新时检测数据是否被修改,若未修改则允许更新。
  • 悲观锁:假定会发生冲突,处理过程中对数据加锁,防止其他事务的修改。

6.4 事务隔离级别

  1. 读未提交:允许读取其他未提交事务的数据,可能导致脏读。
  2. 读已提交:只能读取已提交的数据,避免脏读。
  3. 可重复读:保证同一事务多次读取相同数据时结果一致。
  4. 串行化:最高隔离级别,确保事务之间不会产生干扰,但可能影响性能。

7. MySQL的锁类型

  1. 全局锁:针对整个数据库,阻止其他用户更新数据。
  2. 表级锁:锁定整个表,适用于读密集型应用。
  3. 行级锁:对单行数据进行锁定,提供更高的并发性能。
  4. 页级锁:介于行级锁和表级锁之间,适用于特定场景。

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

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

相关文章

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准,广泛应用于商用车,船舶,农林机械领域中,J1939协议是基于CAN的高层协议,我们来看一下两者之间的关系。在J1939 中,物理层和数据链路…

第13讲 实践:设计SLAM系统

设计一个视觉里程计,理解SLAM软件框架如何搭建,理解视觉里程计设计容易出现的问题以及解决方法。 目录 1、工程目标 2、工程框架 3、实现 附录 1、工程目标 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。 2、工程…

asp.net mvc core 路由约束,数据标记DataTokens

》从0自己搭建MVC 》用 asp.net Core web 应用 空web 应用程序 需要配置 mvc服务 、mvc路由 新建 Controller 、Models、Views 》》》core 6 之前版本 vs2022 asp.net Core Web 应用(模型-视图-控制器) 不需要配置 就是mvc框架 asp.net Core web 应…

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

【Geoserver使用】2.26.0版本发布主要内容

文章目录 前言一、GeoServer 2.26.0 版本二、主要内容1.Java17支持2.Docker更新3.搜索改进4.广泛的 MapML 改进4.重写演示请求页面5.栅格属性表扩展6.GeoCSS 改进7.地球静止卫星 AUTO 代码8.labelPoint 功能改进9.改进的矢量图块生成10.GeoPackage QGIS 兼容性改进11.新的图像马…

深度学习—神经网络基本概念

一,神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元,其功能是接受(树突),整合(细胞体),传导(轴突)和…

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户,都存储在系…

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba 前言一、SpringBoot 与 SpringCloud 版本对应关系:二、SpringCloud 与 SpringCloudAlibaba版本对应关系:三、SpringCloudAlibaba版本 与 组件版本 对应关系:四、搭建S…

Django项目配置日志

需求 在Django项目中实现控制台输出到日志文件,并且设置固定的大小以及当超过指定大小后覆盖最早的信息。 系统日志 使用Django自带的配置,可以自动记录Django的系统日志。 可以使用logging模块来配置。下面是一个完整的示例代码,展示了如…

Java | Leetcode Java题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen s.length(), pLen p.length();if (sLen < pLen) {return new ArrayList<Integer>();}List<Integer> ans new ArrayList<Int…

163页制造业变革转型:营销/服务/研发/供应链/制造/质量/财务

制造业企业要实现变革转型&#xff0c;可以从营销、服务、研发、供应链、制造、质量、劳务以及人力资源等多个方面着手&#xff1a; 一、营销 市场调研与定位 深入了解目标市场的需求、趋势和竞争态势。通过大数据分析、消费者调研等手段&#xff0c;精准把握市场动态&#…

管家婆分销费用分摊功能使用说明!

在入库和销售业务中&#xff0c;往往会产生一些费用需要和入库单和销售单关联&#xff0c;这时候就可以使用费用分摊的功能。下面我们一起来学习在分销A\V系列软件中费用分摊的操作步骤 一、入库费用分摊 1、只有移动加权平均成本算法才有入库费用分摊单&#xff1b;入库费用分…

centos7系统安装宝塔面板

1、开始安装 适用系统 Centos/OpenCloud/Alibaba 稳定版9.0.0 urlhttps://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec等待命令执行&#xff0c;安装完成&#…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构&#xff0c;它可以帮助我们重复执行某段代码&#xff0c;直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下&#xff1a; for (循环变…

Linux下的基本指令/命令(一)

目录 基本命令 1. Is命令/指令: 罗列当前目录下指定的文件或者目录. 2. pwd命令&#xff1a; 查看当前工作的路径 3. cd命令&#xff1a; 切换到指定路径下。 只能切换到目录中 4. tree命令: 树状显式目录 使用前要输入命令 yum install -y tree &#xff0c;用来安装一个…

数组模拟邻接表存图

图的定义 图&#xff08;graph&#xff09;是一种非线性数据结构&#xff0c;由顶点和边组成。我们可以将图 抽象地表示为一组顶点和一组边的集合。G(V,E) 图分为有向图和无向图&#xff0c;下图带箭头为有向图&#xff0c;无箭头为无向图 我们可以用两种方式来表示图&#x…

有点快要跟不上时代的感觉

团队的群里面有一个同事突然问了下&#xff0c;下面的这个 JavaScript 如何进行优化 var startIndex (start undefined || start null) ? null : start[0].Value;看上面的代码就是典型的判断和返回的问题。 如果是要调试的话也不是做不出来&#xff0c;但可能要花点时间&a…

【Java】—— 多线程:线程的创建方式3、4___实现Callable与线程池

目录 8.1 新增方式一&#xff1a;实现Callable接口 8.2 新增方式二&#xff1a;使用线程池 8.1 新增方式一&#xff1a;实现Callable接口 与使用Runnable相比&#xff0c; Callable功能更强大些 相比run()方法&#xff0c;可以有返回值 方法可以抛出异常 支持泛型的返回值&…

音视频整体解码流程和同步流程

目录 1. 整体解码流程1. 初始化 FFmpeg2. 打开媒体文件3. 查找解码器4. 打开解码器5. 读取和解码数据6. 处理解码后的帧7. 释放资源 2. 音视频同步整体流程1. 解复用媒体流2. 解码3. 以音频为时钟源进行音视频同步的策略4. 缓冲区设计 现在先说大体流程&#xff0c;不分析代码 …

网络原理 - TCP/IP

文章目录 传输层UDP协议TCP协议TCP协议的核心机制确认应答机制超时重传机制连接管理三次握手四次挥手 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题 异常情况 小结 网络层IP协议IP地址不够用的问题一、动态分配IP地址二、 NAT机制(网络地址映射)三、使用IPv6 地…