数据库索引事务
Posted AllenSquirrel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库索引事务相关的知识,希望对你有一定的参考价值。
目录
索引:类似于目录功能
原理:
给一张表创建一个索引,相当于创建一个索引表
索引不适用于所有字段,索引不是越多越好会影响插入和删除效率
应用场景:
- 数据量大,经常用于查询依据的字段
- 字段修改频率较低的字段
- 索引过多会占据额外磁盘空间
索引如何提高查询效率?
索引采用特殊的数据结构提供效率(B+树)
B+树与B树区别:
- B树:多叉树;B+树:也是一个多叉树,多叉树可以降低树高度提高查询效率
- B树的索引与数据存储在一个节点中,而B+树索引与数据分离存储,每一个节点占据磁盘空间小,这样一次性可以从磁盘中读取更多索引信息,加快索引效率
- 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(提交)
若并发情况下无隔离性保护机制,则会导致:
- 脏写:事务A进行数据修改,在事务提交之前被其他事务覆盖
- 脏读:一个事务中读取到的数据是其他事务中未提交的数据(解决方法:读已提交)
- 不可重复读:一个事务在不同阶段从数据库中读到的数据不一致(修改同一条数据导致,可加锁解决)
- 幻读:一个事务在不同时间段读取到的数据条数不一致(插入/删除不同数据导致,不可避免)
mvcc:多版本并发控制
- 给每个事务分配一个事务id
- 在事务中对数据进行操作时,都临时拷贝一份数据进行操作
- 在本次事务对数据再次进行访问时所访问的均为临时拷贝(对临时拷贝进行操作,读操作时不阻塞写,写操作也不会阻塞读)
- 事务提交时将事务操作持久化
以上是关于数据库索引事务的主要内容,如果未能解决你的问题,请参考以下文章