关于mysql的事务和索引

1. 事务四大特性(ACID)

  • 原子性:事务的操作要么全部成功,要么全部失败回滚,不可分割。

  • 一致性:事务执行前后,数据必须满足业务规则(如账户总额不变)。

  • 隔离性:多个并发事务之间互不干扰。

  • 持久性:事务提交后,对数据的修改永久保存,即使系统故障也不丢失。

2. 并发事务的问题

  • 脏读:读到其他事务未提交的数据,可能被回滚。

  • 不可重复读:同一事务内多次读取同一数据,结果不一致(数据被其他事务修改)。

  • 幻读:同一事务内多次查询同一范围,结果集不同(其他事务新增或删除了数据)。

3. 索引优缺点

  • 优点

    • 大幅提高查询速度(尤其WHERE、JOIN、ORDER BY)。

    • 唯一索引保证数据唯一性。

  • 缺点

    • 占用额外存储空间。

    • 增删改操作需维护索引,可能降低写性能。

    • 不合理的索引设计可能拖慢查询(如过多索引导致优化器选择困难)。

4. 索引类型

  • 主键索引:唯一且非空,表自动创建。

  • 唯一索引:列值唯一,允许NULL。

  • 普通索引:无唯一性约束,加速查询。

  • 全文索引:支持文本内容的模糊搜索(如LIKE '%keyword%')。

  • 组合索引:多列联合索引,遵循最左前缀原则。

5. 索引存储形式分类

聚集索引 : 必须有 ,而且只 有一个

二级索引: 可以存在多个

6. SQL分析工具

  • EXPLAIN:分析执行计划,关注type(扫描方式)、key(使用的索引)、rows(扫描行数)等字段。

  • 慢查询日志:记录执行时间超过阈值的SQL。

  • Profiler工具:如MySQL的SHOW PROFILE,查看SQL执行各阶段耗时。

  • 第三方工具:如Percona Toolkit、pt-query-digest分析慢查询。

7. SQL优化实践

  • 索引优化

    • 为高频查询条件建索引,避免全表扫描。

    • 使用覆盖索引(索引包含查询字段,减少回表)。

  • 避免SELECT *:只取必要字段,减少I/O和内存消耗。

  • 分页优化

    • 大分页用延迟关联:SELECT * FROM table JOIN (SELECT id FROM table LIMIT 100000,10) t USING(id)

  • 慎用函数操作索引列:如WHERE YEAR(create_time)=2023改为范围查询。

  • JOIN替代子查询:减少嵌套查询的临时表开销。

  • 事务拆分:大事务拆小,减少锁竞争和回滚开销。

  • 定期统计信息更新:如ANALYZE TABLE确保优化器选择正确索引。

示例场景: 某分页查询SELECT * FROM orders LIMIT 100000,10执行缓慢,优化步骤:

  1. 用EXPLAIN发现全表扫描。

  2. 改为覆盖索引+延迟关联:

    sql

    复制

    下载

    SELECT * FROM orders  
    JOIN (SELECT id FROM orders ORDER BY id LIMIT 100000,10) AS tmp  
    ON orders.id = tmp.id;  
  3. 执行时间从2秒降至0.1秒。

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

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

相关文章

【Python】保持Selenium稳定爬取的方法(防检测策略)

selenium 防检测策略的方法汇总: 合理设置延迟:请求间添加随机延迟 (2-10秒) 限制爬取频率:控制每小时/每天的请求量 轮换用户代理:准备至少10个不同的User-Agent 使用住宅代理:优先选择高质量的住宅代理IP 处理验…

SpringSecurity源码解读AbstractAuthenticationProcessingFilter

一、介绍 AbstractAuthenticationProcessingFilter 是 Spring Security 框架里的一个抽象过滤器,它在处理基于表单的认证等认证流程时起着关键作用。它继承自 GenericFilterBean,并实现了 javax.servlet.Filter 接口。此过滤器的主要功能是拦截客户端发送的认证请求,对请求…

什么是DDD?为什么它正在取代传统架构?

什么是DDD?为什么它正在取代传统架构? 1. 传统开发模式的痛点 在经典的MVC架构中,开发流程往往从数据库表结构设计开始,业务逻辑散落在Service层,随着需求迭代容易形成「大泥球」代码: 实体类变成纯粹的…

基于外部中中断机制,实现以下功能: 1.按键1,按下和释放后,点亮LED 2.按键2,按下和释放后,熄灭LED 3.按键3,按下和释放后,使得LED闪烁

题目: 参照外部中断的原理和代码示例,再结合之前已经实现的按键切换LED状态的实验,用外部中断改进其实现。 请自行参考文档《中断》当中,有关按键切换LED状态的内容, 自行连接电路图,基于外部中断机制,实现以下功能&am…

在SQL中,FROM子句中的子查询必须指定别名,即使后续未引用该别名

FROM子句中的子查询必须指定别名 示例错误示例及原因:总结: 在SQL中, FROM子句中的子查询必须指定别名, 即使后续未引用该别名 示例 查询馆藏图书最多的作者姓名及馆藏数量 SELECT 作者, COUNT(图书编号) AS 馆藏数量 FROM 图…

问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)

本文将对"问道数码兽"这一经典卡通风格回合制手游的服务端部署与客户端调整流程进行详细拆解,适用于具备基础 Windows 运维和手游源码调试经验的开发者参考使用。教程以实战为导向,基于原始说明内容重构优化,具备较高的内容查重避重…

Shell脚本-for循环应用案例

在Shell脚本编程中,for循环是一种强大的工具,用于处理重复性任务。无论是批量处理文件、遍历目录内容还是简单的计数任务,for循环都能提供简洁而有效的解决方案。本文将通过几个实际的应用案例来展示如何使用for循环解决具体的编程问题。 案…

Chrmo手动同步数据

地址栏输入 chrome://sync-internals分别点击这2个按钮即可触发手动同步

为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型

GeoJSON规范中没有"圆形"类型 GeoJSON是一种用于表示地理空间数据的标准格式,它的规范中只定义了以下几种基本几何类型: Point (点) LineString (线) Polygon (多边形) MultiPoint (多点) MultiLineString (多线) MultiPolygon (多多边形) GeometryCollection (几…

大数据组件学习之--Kafka 安装搭建

一、前置环境 在搭建kafka之前,请确认自己的hadoop、zookeeper是否搭建完成且可正常运行 二、下载并上传安装包(链接为百度网盘) kafka安装包 tar -zxvf /opt/software/kafka_2.12-2.4.1.tgz -C /opt/module/ 进入解压后的目录更改文件名…

PyQt6基础_pyqtgraph_折线图with缩放调节

目录 字符型横坐标代码 折线图代码 运行 创建新类,继承pg.PlotWidget,在新类中实现业务内容,重写pg.PlotWidget中的wheelEvent方法并使用业务数据实现比较理想的缩放状态。 字符型横坐标代码 class StrAxisItem(pg.AxisItem):def __init…

联邦元学习实现个性化物联网的框架

随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学&#xf…

audio 核心服务AudioPolicyService 和AudioFlinger启动流程

目录 1、audioserver启动 2、AudioPolicyService启动 3、AudioFlinger启动 audio的核心服务有两个,AudioPolicyService 和AudioFlinger他们到在audioserver一个进程中 1、audioserver启动 设备开机,系统启动时将执行 /system/etc/init/audioserver.rc…

反爬虫机制中的验证码识别:类型、技术难点与应对策略

在互联网数据抓取领域,验证码识别是爬虫过程中的关键环节之一。下面对常见验证码类型、技术难点及应对策略进行详细解析,并提供多种场景下的代码实现示例。 一、验证码类型与技术难点 (一)图形验证码 1. 字符验证码 特征&#…

vue element使用el-table时,切换tab,table表格列项发生错位问题

展示问题 问题描述:使用el-table的fixed"right"属性后,如果切换tab时,回出现最后一列错误的问题 官网提供解决方法:doLayout 需要注意的事项:我这里是通过组件使用的table组件,涉及多层组件封装…

示例:Spring JDBC 声明式事务(xml配置形式)

声明式事务是指在不修改源代码的情况下通过配置applicationContext.xml自动实现事务控制,其本质是AOP环绕通知。它的触发时机为:1、当目标方法执行成功时自动提交事务,2、当目标方法抛出运行时异常时,自动事务回滚 核心步骤示例&a…

在vmware中ubuntu系统因为安装了docker查不到ip地址

问题截图: 根据提供的截图信息,可以明确看到ens33网卡处于**物理连接断开(NO-CARRIER)且接口关闭(DOWN)**的状态,这是导致无法获取IP地址的直接原因。以下是针对VMware虚拟机的具体解决方案&am…

51c大模型~合集121

我自己的原文哦~ https://blog.51cto.com/whaosoft/13869815 #大模型何以擅长小样本学习? 这项研究给出详细分析 近年来,大语言模型(LLM)在人工智能领域取得了突破性进展,成为推动自然语言处理技术发展与通用人…

Babylon.js 材质统一转换指南:将 AssetContainer 中的所有材质转换为 PBRMetallicRoughnessMaterial

在现代 3D 开发中,基于物理的渲染(PBR)已成为行业标准。本文将详细介绍如何在 Babylon.js 中将 AssetContainer 加载的各种材质统一转换为 PBRMetallicRoughnessMaterial,实现项目材质的标准化。 为什么需要材质转换? PBRMetallicRoughness…

Go slice切片使用教程,一次通关!

简介 Go 中的 切片(slice) 是 Go 最强大、最常用的数据结构之一。它是对数组的轻量封装,比数组更灵活,几乎所有的集合处理都用切片来完成。 什么是切片(slice) 切片是一个拥有 长度(len&…