索引:(用空间换时间)

定义:相当于一本书的目录,用于加快查找书中某一页的效率.
EG:以查找为例:
如果是顺序表查找,顺序表在内存中.内存访问速度很快,而且数据也没有很多,所以速度还可以.
如果针对数据库进行顺序查找,数据库的数据在磁盘上,磁盘的访问速度很慢,并且此时的数据可能会非常得多,因此导致查找的速度很慢,效率很低.
解决的问题:快速定位,检索数据.加快查找的效率.
应用的场景:
1.数据量较大,且经常对这些列进行条件查询。删除 修改 增加不常见
2.该数据库表的插入操作,及对这些列的修改操作频率较低。
3.索引会占用额外的磁盘空间。

索引可以考虑的数据结构:
1.二叉搜索树 :中序遍历结果是有序的
缺点:每个树只有两个叉,当树的深度比较高的时候查找效率就比较低.
针对树的中序遍历也不是很高效O(N)
2.哈希表:数据库的索引可以考虑哈希,但是哈希也有一些问题无法处理.
哈希是把key代入哈希函数中计算下标的值,根据下标取到对应的链表,再去遍历比较key是否相等.
哈希的时间复杂度O(1)查找的时间效率很高但是只能处理相等的情况,(< > >= between.and)这些情况无法处理.

因此引入B+树
先来看看B树:
Mysql---索引和事物
B树的优点:查找效率比二叉搜索树快很多 同时处理范围查找更容易一些

B+树:

Mysql---索引和事物
其他注意事项:
索引的效果:
1.优点:加快查找效率
2.缺点:对于插入,删除,修改数据(需要重新调整索引结构) 会减慢效率
会占用额外的空间(内存 磁盘)
3.创建索引,删除索引都是比较耗时的操作最好避免在线上操作 先准备好在启动服务器
4.主键索引的叶子节点存储的是数据的完整记录
Mysql---索引和事物
其他索引的叶子节点存的是主键的id
Mysql---索引和事物
比如
创建主键约束 外键约束 唯一约束时会自动创建对应列的索引

索引对应的mysql:
1.查看索引:
Mysql---索引和事物
2.创建索引:
Mysql---索引和事物
3.删除索引:
Mysql---索引和事物

事物:

定义:把一组操作封装在一起.成为了一个共同的执行单元.
特性:
1.原子性(最重要):事物的若干个操作要么就全部执行成功,要么就全不执行(如果中间某个步骤出错就把之前的步骤回滚回去 还原原来造成的影响)
2.一致性:执行事物前后 数据一直处于一种合法状态
3.持久性:事物执行完毕 对数据的修改持久有效(写入磁盘)
4.隔离性(复杂):“并发执行事物” 此处不详细展开,后面具体讨论.

相关文章: