MySQL的事务与索引

MySQL事务与索引的学习

学习目标:MySQL的事务与索引

学习内容:

索引:

1.当数据量比较大的时候,加快查询的速度,可以为表的字段添加索引
(create index 索引名 on 表/字段)
2.底层原理:运用到了B+树。

B+树的原理:

  1. 每个结点都可以存储多个key值,根据不同的Key值可以划分为不同的区间。
  2. 每个叶子结点存储的是索引+值,每个非叶子结点存储的是这个Key值(id)
  3. 每一个的key值在叶子结点中都是处于一个最大值,然后相邻的叶子结点是首位相
    邻的就跟链表一样。

B+树的优势:

  1. 主要是用于缓慢查询的效率特别高,特别删除缓慢查询。
  2. 每次查出来的数据都会准确的落在叶子结点上,查出的来的数据很准确。

常用的索引的sql语句:
show index from 数据库
create index 索引名 on 表名
drop index 索引名 on 表名

事务

四个特性:
1.原子性:对于多个事务来说,要么一次执行成功,否则就会事务回滚,全部执行失败,来保证数据的一致性。
2.一致性:事务执行前后的数据要对应的上。
3.持久性:所有执行过的事务都会保留在磁盘上。
4.隔离性:多个并发的事务直接会产生影响,尤其是它们操作同一个数据库或者是同一张数据表。

显示与隐式事务

一般的insert,update,delete都是隐式事务,如果是在sql语句之前加上了start transaction,后面加上rollback or commit事务回归或者事务提交。这样的就叫显示事务。

事务并发出现的问题:

1.脏数据的读写:如果一个事务是读取,另一个是写,而且它们两个是并行就会发生读取的数据是修改之前的数据,不是正确的数据了。
2.写事务和读事务冲突。
解决:
加上一个读写锁,在读取事务的执行过程中,不允许写的事务,这样就可以保证数据的一致性了。或者是在写事务的执行过程中,不允许读的事务。

### MySQL 事务机制 在 MySQL 中,事务是一组 SQL 操作指令,这些操作要么全部执行成功,要么完全不执行。这种特性确保了数据库的一致性和可靠性。MySQL 的 InnoDB 存储引擎支持 ACID 属性的事务处理。 #### 事务属性 - **原子性(Atomicity)**: 事务中的所有操作作为一个整体被执行或回滚。 - **一致性(Consistency)**: 数据库状态从一致转到另一个一致的状态。 - **隔离性(Isolation)**: 多个并发事务之间相互独立不受干扰。 - **持久性(Durability)**: 已提交的数据永久保存于磁盘上[^2]。 #### 使用事务的方法 为了启动一个新的事务,可以使用 `START TRANSACTION` 或者 `BEGIN` 命令;当所有的语句都完成后,则可以通过 `COMMIT` 提交更改并结束当前事务;如果遇到错误或其他异常情况则可通过 `ROLLBACK` 来撤销未完成的操作。 ```sql START TRANSACTION; INSERT INTO table_name VALUES (...); UPDATE another_table SET column=value WHERE condition; DELETE FROM yet_another_table WHERE id=specific_id; COMMIT; -- or ROLLBACK if something goes wrong. ``` ### 索引使用方法优化技巧 索引是提高查询性能的重要工具之一,但在设计时也需要考虑其带来的额外成本如更新代价以及可能引起的锁争用等问题。 #### 创建合适的索引 应基于应用程序的实际需求来决定哪些列应该被加索引。对于频繁作为条件字段参检索运算的列来说非常适合建立索引。然而需要注意的是过多不必要的索引反而会影响写入速度并且占用更多存储资源[^1]。 #### 组合多列形成复合索引 有时单个列上的简单 B-tree 类型索引并不能满足复杂查询的需求,此时可尝试组合多个相关联度较高的列构成联合键形式的复合索引以提升匹配效率。不过要注意顺序的选择应当遵循最左前缀原则以便让尽可能多的关键字能够利用该结构加快查找过程[^3]。 #### 定期分析和重建索引 随着业务的发展变化原有定义好的索引可能会变得不再适用甚至成为负担。定期通过 `ANALYZE TABLE` 和 `OPTIMIZE TABLE` 对表及其关联对象进行健康检查有助于维持良好的运行状况。另外还可以借助慢日志统计功能找出那些耗时较长且命中率低下的SQL语句进而针对性调整现有配置达到更好的效果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值