MySQL随笔

news/2025/3/10 21:27:58/文章来源:https://www.cnblogs.com/cikm/p/17943777

1、隔离级别

  innoDB通过间隙锁锁定查询范围避免被其他事物修改

  未提交读(导致脏读)、已提交读(导致不可重复读)、可重复读(mysql默认,导致幻读)、串行化 

  脏读:事物执行的过程读到其他事物未提交的数据  

  不可重复读:事物a在多次读取某数据时,事物b进行了修改,导致食物a两次读取结果不一样

  幻读:前后两次查询得到的结果不一样,事物前后两次查询统一范围数据时事物b进行了插入修改并提交

 

2、SQL优化

  a.增加索引;但是要避免索引失效如like、函数等

  b.避免返回不必要的数据列

  c.适当优化sql结构,如避免子查询、全表扫描等

  d.分库分表,单表数据量比较大时

  e.读写分离,读多写少时

 

3、索引失效情况

索引:主键索引、普通索引

使用ecplain 查询sql当前执行计划

  a 索引列上做函数运算导致失效

  b 组合索引需要按照最左匹配法则

  c 索引列存在隐式转换时候,即索引列是字符串类型但是没有加引号

  d 索引列使用不等号或者not查询导致失效

  e 使用like并且%加在前面时候失效,由于不符合最左匹配所以失效

  f 使用or但是语句前后没有同时使用索引的时候也会失效

 

4、update执行时如果where包含索引列且只执行一个语句,使用行锁,否则使用表锁

 

5、为什么索引不适用二叉树而使用B+树

二叉树每次插入大的值需要添加到右侧,深度较高,查一次就要进行一次IO,查找效率没有帮助。

红黑树也是最大的插到右侧,但是会进行自旋,不会全都加到一条线,相当于平衡二叉树,查找次数差不多能减少一半,但是深度还是比较高,而且自旋转也需要消耗资源。

B树一个节点可以存储多个元素,深度较低。

 B+树是对B树的一个增强,如图

 innoDB引擎:自增的在添加的时候不需要修改节点,节省时间

 

一般推荐建立一到两个的联合索引(复合索引)

Explain 命令中的 type 列,显示MySQL查询所使用的 关联类型(Join Types) 或者 访问类型,它表明 MySQL决定如何查找表中符合条件的行。
常见访问类型性能由最差到最优依次为:

ALL < index < range < ref < eq_ref < const < system。

 一般需要range级别或者达到ref级别

  range级别:

  1. 范围条件查询:在 WHERE 子句里带有 BETWEEN><>=<= 的查询。
  2. 多个等值条件查询:使用 IN() 和 OR ,以及使用 like 进行前缀匹配模糊查询

 

非主键索引的都可以称之为二级索引,二级索引是非聚集索引,没有在叶子结点包含全部的数据,只存主键的id,需要根据主键id进行回表再查询;

mysql5.6以后的索引下推可以减少回表

覆盖索引查询的字段都在索引列中,不需要进行回表所以效率高一些。

mysql表关联的底层实现原理:当数据量比较大的时候就算走索引也比较慢

 

explain关键参数type:

 

 

 

 

  

 

索引优化:

  • 全值匹配:使用复合索引时候,查询条件包括索引所有的列;
  • 索引列上少算数;使用函数没有办法根据有序性进行检索;
  • 范围索引后面会失效;前面使用有序范围后,后面的字段是无序的;如果第一个字段搜索范围小想强制使用索引可以加上关键字Force Index(索引名称)防止后面字段全表扫描
  •  尽量使用覆盖索引,不写星号(防止回表);explice查看extra显示index
  • 不等空值还有or,索引失效要少用,还有not in 、not exists也会失效,范围查询mysql自己判断
  • like百分号写右边;
  • 单引号不要省略

sql优化

  • 不要写*
  • 用小表驱动大表
  • 连接查询代替子查询;具体场景具体分析
  • 提升group by效率,分组字段添加索引
  • 批量插入优化,mybatis提供了sqlsession.getMapper(EmpMapper.class).insertBatch(数据list),五百以内
  • 使用limit
  • union all替代union 第一个不会去重,去重时需要遍历排序等内部操作
  • 尽量少关联

 

 

 

 

 

 

 

  

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

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

相关文章

Unity反射的几种方式

1.利用额外的相机将反射的内容渲染到Render Target Texture上参考:<Unity入门精要>10.2.1节 原理很简单,以反射面(例如镜子)为中心,创建一个相机,处于主相机在镜子中反射的位置,用脚本实时更改相机位置与朝向 这个相机渲染的内容不直接输出到屏幕,而是输出到一张RTT上 然…

通过v-if动态设置Element表格列时,出现闪动等问题

this.$nextTick(() => {this.$refs.table?.doLayout() //尽量加上可选链,不然可能存在获取不到table实例,造成doLayout为undefined的情况) })

测试用例设计方法六脉神剑——第一剑:入门试招,等价边界初探

1 背景及问题 G.J.Myers在《软件测试技巧》中提出:测试是为了寻找错误而运行程序的过程,一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试, 一个成功的测试是揭示了迄今为止尚未发现的错误的测试。对于新手来说,日常测试用例设计时,很少用到系统的方法论,大多…

原生html+js实现两两元素配对,用线条连接两个元素

效果如下:画线部分借鉴了“https://blogweb.cn/article/1403842582411”此链接文章作者的代码,感谢! 直接放出代码:点击查看代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>配对</title…

代码随想录算法训练营第三十天 | 51.N 皇后

51.N 皇后 题目链接 文章讲解 视频讲解递归三部曲递归函数参数 需要传入当前chessBoard和棋盘大小n,以及当前要放置皇后的行数rowvoid backtracking(vector<string>& chessBoard, int n, int row);递归终止条件 当最后一个皇后放置好后结束if(row == n) {result.pus…

使用Verdaccio创建一个本地私有库,并应用

安装verdaccio npm install -g verdaccio 直接verdaccio启动 可以先右上角登录然后先使用 npm create vite@latest 然后创建属于自己的一个vue3项目 vite-project(随便起了个名) npm i 一下 npm run dev 跑起来看看 然后创建下列文件夹style/indsx/scss .u-t…

【医疗器械产品分类规则了解】

分类目录由国家食品药品监督管理部门依据医疗器械分类规则制定: 医疗器械按照风险程度由低到高,管理类别依次分为第一类、第二类和第三类。医疗器械风险程度,应当根据医疗器械的预期目的,通过结构特征、使用形式、使用状态、是否接触人体等因素综合判定。 第一类医疗器械是…

VS下QT使用QCustomplot报错QPainter::HighQualityAntialiasing: Use Antialiasing instead

@Time:2024-06-07 @Error:VS+QT+QCustomplot 编译时报错 ERROR 4995 QPainter::HighQualityAntialiasing: Use Antialiasing instead @原因:使用标记有 deprecated 的函数。参见:/sdl(启用附加安全检查) | Microsoft Learn @解决办法:关闭编译报错或编译警告;参见:编…

[Qt开发]当我们在开发兼容高分辨率和高缩放比、高DPI屏幕的软件时,我们在谈论什么。

前言 最近在开发有关高分辨率屏幕的软件,还是做了不少尝试的,当然我们也去网上查了不少资料,但是网上的资料也很零碎,说不明白,这样的话我就做个简单的总结,希望看到这的你可以一次解决你有关不同分辨率下的所有问题。 分辨率?DPI? 首先我们搞清楚我们现在到底面对的是…

Maui+blazor中使用https时信任所有证书

Maui中的Android使用https时信任所有证书 前言 最近使用Maui+blazor写了一个Android app,需要调用webapi接口,同时需要用websock与服务器通信,在使用http和https中遇到一些问题 http Android默认禁止http,想要使用http需要在Platforms\Android目录下找到AndroidManifest.xml…

文件格式转换器哪个工具更好用?

文件格式转换器哪个好用?相信很多小伙伴在处理PDF文件时会遇到各种各样的问题,不晓得的选择哪款文件格式转换器!这个时候我们该如何解决呢?以下是文件格式转换器推荐,一起来看看吧。 一、Adobe Acrobat 推荐指数★★★☆☆ Adobe Acrobat是一款非常成熟的在线PDF转换软件,…

yarn或者npm安装依赖报错401 Unauthorized

1. 报错2.原因 在npm顶层的npmrc中指定了某仓库地址,触发了需要验证(可以通过直接打开401的地址看浏览器是否能直接下载)