数据库(三)索引事务

目录

索引:类似于目录功能

聚簇索引:

非聚簇索引:

数据库操作中的索引类型:

事务:一个或多个sql组合

事务特性:

事务操作流程:

mvcc:多版本并发控制


索引:类似于目录功能

原理:

给一张表创建一个索引,相当于创建一个索引表

索引不适用于所有字段,索引不是越多越好会影响插入和删除效率

应用场景:

  • 数据量大,经常用于查询依据的字段
  • 字段修改频率较低的字段
  • 索引过多会占据额外磁盘空间

索引如何提高查询效率?

索引采用特殊的数据结构提供效率(B+树)

B+树与B树区别:

  1. B树:多叉树;B+树:也是一个多叉树,多叉树可以降低树高度提高查询效率
  2. B树的索引与数据存储在一个节点中,而B+树索引与数据分离存储,每一个节点占据磁盘空间小,这样一次性可以从磁盘中读取更多索引信息,加快索引效率
  3. B+树数据顺序存储,在连续查询或范围查询时可以连续IO取出数据,效率较高

聚簇索引:

以主键作为主索引,数据节点在磁盘中顺序存储,其他的索引作为辅助索引,其中辅助索引保存的是主键索引的数据,最终还是依靠主键索引进行查询

非聚簇索引:

主键索引与普通索引区别不大,都是最终索引项中存放磁盘中的存放地址(指针),数据节点在磁盘中并非顺序存储

适用场景:

聚簇索引:索引与数据都是顺序存储,中间插入/删除需要调整索引的数据结构,效率较低,但由于数据顺序存储,在连续/范围查询时效率较高

非聚簇索引:中间插入数据,只需要将数据存储在磁盘新的位置,中间调整索引信息即可,效率高,但索引与数据存储顺序不一致,导致在连续/范围查询时类似于单个查询,效率较低

大多数情况都是使用自增主键作为聚簇索引,这样的话数据与索引总是在最后添加,而不涉及中间插入的调整1

数据库操作中的索引类型:

  • 主键索引:一个字段被设置为主键,默认会为主键字段创建索引
  • 唯一索引:一个字段被设置了唯一约束,默认会为该字段创建索引
  • 外键索引:一个字段被设置为外键,默认会为外键字段创建索引
  • 普通索引:并非默认创建的索引,自定义创建

创建索引:create index idx_name on tbname(fields_name);

删除索引:drop index idx_name on tbname;

查看索引:show index from tbname\G;

事务:一个或多个sql组合

事务特性:

  • 原子性:一次完成
  • 一致性:事务前后,数据完整性要符合预设规则,依赖原子性
  • 隔离性:允许多个事务并发执行,不会因为交叉执行导致数据不一致
  • 持久性:事务提交之后,对数据的修改是永久的

事务操作流程:

begin(开启事务)  rollback(回滚)   commit(提交) 

若并发情况下无隔离性保护机制,则会导致:

  1. 脏写:事务A进行数据修改,在事务提交之前被其他事务覆盖
  2. 脏读:一个事务中读取到的数据是其他事务中未提交的数据(解决方法:读已提交)
  3. 不可重复读:一个事务在不同阶段从数据库中读到的数据不一致(修改同一条数据导致,可加锁解决)
  4. 幻读:一个事务在不同时间段读取到的数据条数不一致(插入/删除不同数据导致,不可避免)

mvcc:多版本并发控制

  1. 给每个事务分配一个事务id
  2. 在事务中对数据进行操作时,都临时拷贝一份数据进行操作
  3. 在本次事务对数据再次进行访问时所访问的均为临时拷贝(对临时拷贝进行操作,读操作时不阻塞写,写操作也不会阻塞读)
  4. 事务提交时将事务操作持久化
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HT . WANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值