数据库(三)索引事务
目录
索引:类似于目录功能
聚簇索引:
非聚簇索引:
数据库操作中的索引类型:
事务:一个或多个sql组合
事务特性:
事务操作流程:
mvcc:多版本并发控制
索引:类似于目录功能
原理:
给一张表创建一个索引,相当于创建一个索引表
索引不适用于所有字段,索引不是越多越好会影响插入和删除效率
应用场景:
- 数据量大,经常用于查询依据的字段
- 字段修改频率较低的字段
- 索引过多会占据额外磁盘空间
索引如何提高查询效率?
索引采用特殊的数据结构提供效率(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
- 在事务中对数据进行操作时,都临时拷贝一份数据进行操作
- 在本次事务对数据再次进行访问时所访问的均为临时拷贝(对临时拷贝进行操作,读操作时不阻塞写,写操作也不会阻塞读)
- 事务提交时将事务操作持久化
数据库(三)索引事务相关推荐
- MySQL数据库:索引+事务+JDBC
一.索引 1.1 何为索引 在数据库中数量及其庞大的时候,怎么快速找到目标呢?此时就会用到索引.一本书想快速找到自己想找的知识点,首先就会先去看目录,而索引就是相当于书的目录,方便查询. 1.2 索引 ...
- Spring Boot 学习之,数据库三 ,事务
事务管理:比如两条信息同时插入数据库,如果一条不成功,那么另一条也不插入.这样就需要引入了事务管理,需要在方法上加 @Transactional事务注解 结构.png 在上一节基础上添加ManInfo ...
- 【数据库】第三章 事务、索引和SQL优化
[数据库]第三章 事务.索引和SQL优化 文章目录 [数据库]第三章 事务.索引和SQL优化 一.事务 1.原子性 2.持久性 3.隔离性 4.一致性 二.索引 1.介绍 2.分类 3.底层实现 4. ...
- MySQL数据库的索引、事务和存储引擎
目录 一.索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则 1.4 索引的分类 1.5 索引的创建 1.5.1 普通索引 1.5.2 唯一索引 1.5.3 主键索引 1.5.4 组 ...
- 基础第三-MySQL-多表查询-索引-事务笔记
多表查询介绍 目标 了解什么是多表查询,及多表查询的两种方式 什么是多表查询 查询多张表才能得到我们想要的数据 比如:我们想查询到孙悟空在哪个部门,需要将部门表和员工表同时进行查询 [外链图片转存失败 ...
- 数据库(4):索引 与 事务
"那些只言片语戳中我的心" 一.认识磁盘 我们都知道,mysql存在的目的,就是为了解决,用户直接与存储介质打交道效率低的问题. 磁盘是计算机中的一个机械设备,相比于计算机其他电子 ...
- Spring事务专题(三)事务的基本概念,Mysql事务处理原理
我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...
- mysql 事物状态有几种_mysql第三章 事务以及日志
mysql第三章 事务以及日志 一. 事物简介 每条DDL DCL语句都是事务. 每个begin 到coomit语句是一个事务 二. 事物特性ACID以及开启方式 1. 原子性(A),部成功执行或全部 ...
- 定时创建oracle索引,oracle数据库关于索引建立及使用的详细介绍
索引的说明 索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护. 如果SQL语句仅访 ...
- MySQL:指定索引+事务+存储引擎的配置 开发必备 天呐!为什么会有索引这种东西
来来来,我告诉你为什么要有索引 索引的概念 索引的作用 索引的分类 普通索引创建的三种方式与删除 创建唯一索引与创建的三种方式 主键索引与创建的两种方式 组合索引 全文索引 创建索引的原则依据 事务的 ...
最新文章
- Linux chattr命令详解
- linux 格式化未分配区间,Linux 格式化分区 报错Could not stat --- No such file or directory 和 partprobe 命令...
- python中Scipy模块求取积分
- libevent入门
- Leetcode 92 反转链表 II (每日一题 20210726)
- 操作系统外壳(shell)
- Visual Studio Code Go插件配置选项
- java一个源文件供一个程序_java02 Java源文件范例提供了一个布局合理的Java程序范例 - 下载 - 搜珍网...
- python redis插件安装
- 文字阴影(HTML、CSS)
- linux 系统基础知识 - vgextend命令
- mysql5.6主从复制与基于amoeba实现读写分离
- angelajs中ajax,前端测试数据怎么利用Mock.js进行生成
- python series增加一行_关于python:将一个列表或系列作为一行添加到pandas DataFrame中?...
- iOS app启动图片及icon图片及应用名设置
- 十二个开源UML工具
- 802.11系列标准简介
- android传感器原理,浅谈Android传感器 III-磁传感器
- 分享 | 智慧水务建设方案
- VS 调试时,不允许修改代码