通俗的讲,索引与数据库中的表和数据的关系就类似于书架上的图书(表)、书籍内容(数据)和书籍目录(索引)的关系
在数据库系统中建立索引主要有以下作用:
减少对数据的访问次数就是实现索引时的重要思想,接下来将会对几种数据结构进行分析,以找到更适合的实现索引的数据结构
二叉搜索树
由于二叉搜索树可能是一个单支树,时间复杂度为 O(N)
AVL 树
O(logN)
O(logN)
红黑树
O(logN)
哈希表
O(1)
到这里为止,好像只有 AVL 树或者红黑树更加适合用作 MySQL 的索引的实现,而这两个数据结构的查找效率直接是由树的高度决定的,因此数据增多的话,树的高度也会增加。
为了进一步优化,就可以使用 N 叉搜索树来降低树的高度,即减少磁盘 IO,以提高查找效率
B 树
B 树是 N 叉搜索树的一种
B 树示例结构:
用在索引中,每个结点都表示一个记录
B 树的特点:
每个结点可能包含 N 个子树
每个结点上都可能存在多个值
左子树的值都小于根节点的对应值,右子树的值都大于根节点的对应值
B+ 树
B+ 树相对于 B 树的改进:
叶子节点存储每行记录,非叶子节点只要存储每行的索引值即可
非叶子节点的值存在重复,使得叶子结点这一层是完整的数据集合
可以通过类似于链表的方式,把所有的叶子节点连接起来
B+ 树的优势:
善于进行范围查找
由于所有的查询都是落在叶子结点上,故查询的速度是比较稳定的
由于叶子结点是数据的全集,因此就可以把叶子结点存到硬盘上,非叶子结点直接存到内存中,大大降低了读取硬盘的次数
补充:
创建主键约束(primary key)、唯一约束(unique)、外键约束(foreign key)时,会自动创建对应列的索引
语法:
show index from 表名;
示例:
语法:
create index 索引名 on 表名(字段名);
示例:
语法:
drop index 索引名 on 表名;
示例:
注意:
主索引不能删除,删除会报错
事物:是属于计算机中一个很广泛的概念,一般是指要做的或所做的事情。在关系数据库中,一个事务可以是一条 SQL 语句或者一组 SQL 语句或整个程序。
通俗的讲,比如银行转账的操作,A 转给 B 500元,那么这个操作其实包含了 A 账户余额减少500元和 B 账户余额增加500元两个操作。
事物就相当于将这一连串的动作给打包,使其成为一个整体,要么全都不做,要么全都做完
用上述银行转账的例子为例,假设 A 账户减少500元的操作成功了,但 B 账户增加500元的账户没有成功,那么这个转账的操作是失败的。
事物的核心特点就是: 把一系列操作给打包到一起,构成一个整体,要么全都做完,要么一个都不做。
全都不做是指: 如果某个操作失败了,那么就会将此时的中间状态偷偷还原回去
因此使用事物的话就可以保证,某一系列的操作,不会只完成其中一部分,它要么完全完成,要么都没有完成
事务是恢复和并发控制的基本单位,它具有四个属性:原子性、一致性、持久性、隔离性
事物的核心是原子性
概念:
一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
事物的核心是原子性,原子性的核心是回退为中间状态,回退为中间状态核心就是回滚,回滚的核心就是记住每步的操作
概念:
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
执行事物之前和执行事物完成后,当前表里的数据都是合理的状态
概念:
持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
事物操作的数据都是直接操作硬盘,而硬盘的数据都是持久化的
概念:
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
start transaction;
-- 回滚:表示上述 SQL 语句全部失败
rollback;
-- 提交:表示上述 SQL 语句全部成功
commit;
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://t4dmw.blog.csdn.net/article/details/121646704
内容来源于网络,如有侵权,请联系作者删除!