本文整理自网络,侵删。
目录
- 1. 索引
- 1.1 概念
- 1.2 作用
- 1.3 索引的原理
- 1.3.1 减少磁盘的访问次数是构建索引的核心思想
- 1.3.2 B+ 树适用实现索引的底层
- 1.4 适用场景
- 1.5 使用语句
- 1.5.1 查看索引
- 1.5.2 创建索引
- 1.5.3 删除索引
- 2. 事务
- 2.1 概念
- 2.2 为什么使用事务
- 2.3 四大属性
- 2.3.1 原子性
- 2.3.2 一致性
- 2.3.3 持久性
- 2.3.4 隔离性
- 2.4 使用方法
1. 索引
1.1 概念
- 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
- 在数据库关系图中,可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
通俗的讲,索引与数据库中的表和数据的关系就类似于书架上的图书(表)、书籍内容(数据)和书籍目录(索引)的关系
1.2 作用
在数据库系统中建立索引主要有以下作用:
- 快速取数据
- 保证数据记录的唯一性
- 实现表与表之间的参照完整性
在使用 order by、
group by 子句进行数据检索时,利用索引可以减少排序和分组的时间
1.3 索引的原理
1.3.1 减少磁盘的访问次数是构建索引的核心思想
索引的目的是方便进行查询。
MySQL 的查询主要是 select
,select
基本执行的过程包括遍历表、依次取出每个记录、根据 where 字句的条件进行筛选
由于 MySQL 是把数据储存在硬盘上,因此进行查询时,每次取出记录都意味着要访问硬盘
而 IO 设备对硬盘的访问效率远低于对内存的访问,因此减少磁盘的访问次数就可以提高查询的效率,也就是构建索引的核心思路
1.3.2 B+ 树适用实现索引的底层
减少对数据的访问次数就是实现索引时的重要思想,接下来将会对几种数据结构进行分析,以找到更适合的实现索引的数据结构
二叉搜索树:
由于二叉搜索树可能是一个单支树,时间复杂度为 O(N)
AVL 树:
- AVL 树本质是一个二叉平衡搜索树,是对二叉搜索树的一个改进,它会保证了左右子树的高度差不超过1,即不会存在单支树的结构,查找时间复杂度为 O(logN)
- 因为需要满足左右子树高度差不超过1的条件,所以插入或者删除操作会破坏 AVL 树的结构。因此需要随时对树进行调整。虽然查询效率得到了满足,但是降低了插入和删除操作的效率,插入删除时间复杂度为 O(logN)
红黑树:
- 红黑树本质是一个放松了规则的 AVL 树,即不要强制左右子树高度差不超过1,会降低要求,以此来保证插入和删除操作的效率。
- 整体和 AVL 树差异不大,查询插入删除的时间复杂度为 O(logN)
哈希表:
- 哈希表可以做到查询、插入、删除的时间复杂度都是 O(1)
- 但是哈希表的一个关键是必须要比较相等,但是形如大于、小于之类的条件无法做到,这就和实际查询的情况不符合了
到这里为止,好像只有 AVL 树或者红黑树更加适合用作 MySQL 的索引的实现,而这两个数据结构的查找效率直接是由树的高度决定的,因此数据增多的话,树的高度也会增加。
为了进一步优化,就可以使用 N 叉搜索树来降低树的高度,即减少磁盘 IO,以提高查找效率
B 树:
B 树是 N 叉搜索树的一种
B 树示例结构:
用在索引中,每个结点都表示一个记录
B 树的特点:
- 每个结点可能包含 N 个子树
- 每个结点上都可能存在多个值
- 左子树的值都小于根节点的对应值,右子树的值都大于根节点的对应值
B+ 树:
B+ 树是一种特殊的 N 叉搜索树,是 B 树的改进版
B+ 树示例结构:
相关阅读 >>
了解mysq(oracle)模糊查询 使用instr()替代like提升效率
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL 数据库 索引和事务
相关推荐
评论
管理员已关闭评论功能...