索引/事务bing原理

Posted 鸟随二月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引/事务bing原理相关的知识,希望对你有一定的参考价值。

索引原理

前言




索引

索引独立数据文件(逻辑上),被数据管理系统独立管理的,和表中的数据有关联的,专门的算法设计,目的提高查询效率

索引分类

按照用途分类

按照数据结构分类

哈希索引,搜索树索引(哈希表,平衡二叉树,调表)

按照关联列分

索引的数据结构

哈希表和搜索树实现

哈希表的优点:
1)速度相对来说可以较快(也不是差别很大的快)
2)原理和实现简单——实现线程安全比较容易
平衡搜索树的优点:
1)搜索树中维护的 key是有序的!
2)不会出现哈希冲突剧烈的情况

二叉树搜索树(AVL、红黑树) vB-树系列

AVL树和红黑树在各种场景下,差别极小。
AVL的高度咯<红黑的高度1)查找理论上可以更快一点(差别很少,基本可以忽略不计)
2)调整的速度较慢(基本可以忽路不计)

二叉平衡搜索树和多叉平衡搜索树

b树和b+树

索引优缺点

优点
• 极大地提升查询速度
缺点
• 增加空间使用
• 增加修改成本
• 创建索引也算需要消耗时间的

索引原则

• 在大量数据的表上添加索引
• 不要在服务在线时轻易调整索引
• 在经常作为查询条件或者排序依据
的列上添加索引
• 通过设计 SQL,提高索引的利用率

索引命中规则



EXPLAIN SQL命令查看查询执行计划,通过这个结果,可以进一步分析查询是否有命中索引!
explain查询SQL;

InnoDB 中的 聚簇索引(clustered index) vs 非聚簇索引(b+树)

InnoDB 中,数据记录文件被维护在以主键作为 key 的 B+树中,数据记录作为 B+树 的 value 被维护在叶子结点中。这种数据记录文件又被称为聚簇索引。
与之相对的,其他普通索引文件则被称为非聚簇索引。


事务

特性

原子性:不涉及并发的场景,一个事务的中的所有SQL(一个或者多个)应该视为一个整体。all or none
持久性:一个事务一旦提交(Commit),修改必须持久化。即使之后出现问题了,需要保证修改仍然生效
隔离性:并发的事务互相之前不可见,也互不影响。——理想目标
—致性:和不同的业务相关的
转账系统:所有人账户的金额总数不变
借书系统:—本书的总量-—本书的存量=这本书的借阅记录和
超越数据的部分,往往需要更复杂的动作去处理,我们暂时不讨论

3

数据库储存策略



undolog

redolog

总结

• 日志的大小远远小于数据记录的大小
• 日志的写入往往是追加(append)的,数据记录的写入则是随机(random)的

事务的实现

隔离级别

并发控制的实现

加锁



两阶段所会出现死锁

时间戳机制

多版本控制


例如:

性能优化

• 轻易不去惹事(在进行设计时,不要引入造成性能下降的设计)

• 遇到事咱也不怕事(有一套方法论来解决问题)

• 知道自己的能力边界,学会去摇人(超出 RDBMS 能力范围的用其他方案)
学会使用大数据(Hadoop、Hive、Spark……)解决问题

以上是关于索引/事务bing原理的主要内容,如果未能解决你的问题,请参考以下文章

索引/事务bing

mysql事务的理解学习, 面试不问索引原理就是事务原理

InnoDB事务锁之行锁-insert加锁原理图-聚集索引

InnoDB事务锁之行锁-insert二级索引加锁原理图

InnoDB事务锁之行锁-delete search阶段加锁原理图-聚集索引

MySQL 数据库 进阶 面试官常问 索引+事务+JDBC