数据库索引和事务
索引
- 二叉查询树-左小,又大。有特殊情况变成线性二叉树;
- B-tree 平衡多路查找树,如果每个节点,有N个孩子,每个节点主要包含关键字和指向孩子的指针。
- B+tree
1.非叶子节点的子数指针与关键字个数相同,b+树能存储很多的关键字
2.非叶子节点仅用来做索引,数据都保存在叶子节点中。
3.所有叶子节点具有一个链指针,指向下一个叶子节点。 - B+树相对于B树的优势
1.B+树的磁盘读写代价更低
2.B+树的查询效率更加稳定
3.B+树更有利于对数据库的扫描
使用explain工具分析SQL
联合索引的最左匹配原则:
- 最左前缀匹配原则,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如 a=3 and b=4 and c>5 and d=6,如果建立(a,b,c,d)顺序的索引,d是无法使用索引的,如果建立(a,b,d,c)的索引则都可以使用到,a、b、d的顺序可以任意调整。
- =和in可以乱序,比如 a=1 and b=2 and c=3 建立(a,b,c)索引可以任意顺序,MySQL的查询优化器会帮你优化成索引可以识别的形式。
数据库事务四大特性
事务:作为单个逻辑单元执行的一个操作,要么全部完成,要么全部失败:
- 原子性 :事务包括的所有操作,要么全部执行,要么全部失败。
- 隔离性 :多个事务并发执行,一个事务的执行不应该影响其他事务的操作。
- 一致性 :事务应该保证数据库状态从一个一致性状态转换到别一个一致性状态。
- 持久性 :一个事务一旦提交,它的数据应该永久地保留在数据库中。