当前位置: 首页 > news >正文

MYSQL:索引与锁表范围简述

一、聚簇索引原则

当有主键索引时,选择主键索引;如果没有主键索引,选择第一个的unique索引;如果都没有就选择隐藏生成的ROW_ID。

二、加锁原则

来自知乎MySQL探秘(七):InnoDB行锁算法 - 知乎 (zhihu.com)

  • 在不通过索引条件查询时,InnoDB 会锁定表中的所有记录。所以,如果考虑性能,WHERE语句中的条件查询的字段都应该加上索引。这是由于查询时没有通过索引操作,会扫描一遍全表的ROW_ID,相当于是加上了表锁。
  • InnoDB通过索引来实现行锁,而不是通过锁住记录。因此,当操作的两条不同记录拥有相同的索引时,也会因为行锁被锁而发生等待。
  • 由于InnoDB的索引机制,数据库操作使用了主键索引,InnoDB会锁住主键索引;使用非主键索引时,InnoDB会先锁住非主键索引,再锁定主键索引。例如锁住唯一索引,主键索引也被锁住了。
  • 当查询的索引是唯一索引(不存在两个数据行具有完全相同的键值)时,InnoDB存储引擎会将Next-Key Lock降级为Record Lock,即只锁住索引本身,而不是范围。
  • InnoDB对于辅助索引有特殊的处理,不仅会锁住辅助索引值所在的范围,还会将其下一键值加上Gap LOCK。
  • InnoDB使用Next-Key Lock机制来避免Phantom Problem(幻读问题)。

三、补充

对于原则的后几点,我还不是很清楚,等学习了相关课程后,再进行记录。

相关文章:

  • Python 解压静态库 .a 和 .lib 文件
  • 【蓝桥杯】2023省赛H题
  • springboot前后端时间类型传输
  • Ansible的role
  • 0基础学习PyFlink——使用datagen生成流式数据
  • 【架构图解】API架构图解:如何以图表形式展现复杂系统
  • XPATH 注入漏洞
  • 数据可视化:动态柱状图
  • 关于SNAP的Biophysical Processor模块的计算准确率以及大厂10月种植情况
  • 网络安全进阶学习第二十一课——XXE
  • Docker数据卷使用过程中想到的几个问题
  • linux下使用vscode对C++项目进行编译
  • vue的rules验证失效,部分可以部分又失效的原因
  • Linux之管道
  • 下载安装各种版本的Vscode以及解决VScode官网下载慢的问题
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [数据结构]链表的实现在PHP中
  • [译] React v16.8: 含有Hooks的版本
  • 【Leetcode】104. 二叉树的最大深度
  • Angular数据绑定机制
  • Js基础知识(一) - 变量
  • miaov-React 最佳入门
  • react 代码优化(一) ——事件处理
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 百度地图API标注+时间轴组件
  • 闭包--闭包作用之保存(一)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 解析带emoji和链接的聊天系统消息
  • 使用agvtool更改app version/build
  • 思维导图—你不知道的JavaScript中卷
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 追踪解析 FutureTask 源码
  • 阿里云ACE认证之理解CDN技术
  • 阿里云重庆大学大数据训练营落地分享
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​TypeScript都不会用,也敢说会前端?
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)pulsar安装在独立的docker中,python测试
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)u-boot-nand.bin的下载
  • (一)基于IDEA的JAVA基础12
  • (转)可以带来幸福的一本书
  • .Net core 6.0 升8.0
  • .NET Core 中的路径问题
  • .NET 使用配置文件
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解