IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库索引以及事务的相关知识 -> 正文阅读

[大数据]数据库索引以及事务的相关知识

1.索引

目的:为了提高查找的速度(但是索引拖慢了增删改的速度)
本质上就是把数据库中的记录按照一点的规则/数据结构给组织起来。

1.1使用场景

(1)数据量较大,且经常对这些列进行条件查询。
(2)该数据库的插入操作,及对这些列的修改频率较低。
(3)索引会占用额外的磁盘空间。

1.2索引相关语句

查看索引:show index from 表名;
创建索引:create index 索引名 on 表名(字段名);
删除索引:drop index 索引名 on 表名;

1.3索引内部的数据结构

B+树(N叉搜索树)
【注:只有B+树和B-树(B树),没有B减树】
以下图为例:
在这里插入图片描述
1.父节点里面的值,会作为子节点的最大值出现(也可以是最小值)这样的目的就是让所有叶子节点就包含了整体数据的全集。
2.叶子节点按照顺序通过链表的方式连接了起来,高效实现范围查找。
3.每一行数据的其他列信息,只存在于叶子节点上,非叶子节点仅仅包含索引列的数据。非叶子节点占有的空间就比较小了,可以把这部分内容直接放到内存中,后续查找就可以主要去读内存,减少很多次磁盘操作。

1.4面试题:为什么不用线性表,二叉搜索树,哈希表?

答:线性表效率比较低;二叉搜索树(AVL,红黑树)高度相比较B+树来说高,不合适;哈希表只能进行值相等的查找,不太方便进行值比较大小的范围查找。

2.事务

2.1什么是事务?

数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么全执行,要么全不执行。

2.2事物的使用

(1)开启事务
    start transaction
(2)执行多条SQL语句
(3)回滚或提交
    roolback/commit

2.3事务的特性:

(1)原子性:把若干个SQL语句打包成一个整体,要么全执行,要么全不执行。
(2)一致性:事务执行完毕之后,数据仍然是合理的。
(3)持久性:事务执行完毕之后,数据存在磁盘上,哪怕重启主机,数据也仍然存在。
(4)隔离性:并发执行的事务所产生的问题和解决方案。

3.谈谈MySQL并发执行事务可能产生的问题

(1)脏读问题
一个事务A在修改数据,另一个事务B直接就读取A正在修改的数据,此时B读到的就是脏数据,这个动作就叫脏读

如何解决:给写操作加锁,并发程度就降低了,同时隔离性就提高了。

(2)不可重复读
事务A修改数据然后提交,提交完毕后事务B开始读取事务,事务B中包含了很多次读操作,如果事务B两次读取的操作得到的结果不一样,就是不可重复读。

如何解决:给读操作加锁,对并发又进一步提供了限制,并发程度更低,隔离性更高。

(3)幻读
事务B正在读取数据,事务A插入了新的数据/删除了某个数据,事务B两次读取到的数据集的个数发生了变化。

如何解决:串行化,彻底让事务之间串行执行,不涉及任何并发事情,一个事务执行完再执行下一个。

4.谈谈MySQL中事务的隔离级别

(1)read uncommitted 没有做出任何隔离限制,三个问题都存在,执行效率最高。

(2)read committed 进行写加锁,并发程度降低,隔离性增加,脏读问题解决。

(3)repeatable read 读写加锁,并发程度降低,隔离性进一步增加,脏读问题以及不可重复读问题解决。
【MySQL默认的隔离级别】

(4)serializable 串行化,并发程度最低,隔离性最高,三个问题都解决了,此时执行效率最低。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:53:24  更:2021-09-11 18:55:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:39:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码