多叉树(B树)
二叉树(二分查找):无法控制深度
AVL树(平衡树,左右子树相差不大于1):自旋严重影响插入性能 性能差
红黑树:基于AVL树,损失部分查询性能提升插入性能,最低子树与最高子树之差小于两倍即可,而且加入的变色特性来满足插入与查询性能的平衡。无法控制深度
B+树:将数据放在叶子节点
InnoDB
适合大量insert,update,delete
索引文件和数据是放在一起的。当给普通列建立索引时,该索引表的叶子节点上的数据是主键值而不是数据。所以通过这个列去查询数据时,还要查询主键的索引表。这个过程查询了两次索引表->称 回表
MYISAM
适合大量select
索引文件和数据是放在分开的。主键索引表的叶子节点上的数据是地址,而不是数据
自增索引:自增锁
页分裂(页合并):严重影响性能
主键索引:主键是一种唯一性索引,但它必须指定为PRIMARY KEY ,每个表只能有一个主键
唯一索引:索引列的所有值都只能出现一次,即必须唯一,值可以为空。不会进行回表
普通索引:基本的索引类型,值可以为空,没有唯一性(覆盖索引)会进行回表
覆盖索引: select * from table where name = ‘’; // 会进行回表
select id from table where name = ‘’; // 不会进行回表,叫覆盖索引
全文索引:MyISAM支持,Innodb在5.6后支持
- 全文索引的索引类型为FULLTEXT,全文索引varchar char,text类型的列上创建
倒排索引:
组合索引:多列值组成一个索引,专门用于组合搜索(最左匹配原则)
在两列需求差不多情况下,尽量使索引文件小,也就是占空间越大的列尽量排在前面(左边)
索引下推:select * from table where name = ‘zhangsan’ and age=10;
有三条数据,和组合索引(name,age)
| id | name | age |
|---|---|---|
| 1 | zhangsan | 10 |
| 2 | zhangsan | 20 |
| 3 | zhangsan | 40 |
没有索引下推,则此SQL有两次操作
1.通过组合索引(name,age)查询返回(1,2,3)
2.通过id查询id索引查询全表值,然后去匹配name和age
有索引下推则:
1.通过组合索引(name,age)查询返回(1)// 直接通过索引匹配
2.通过id查询id索引查询全表值,然后去匹配name和age
mysql执行计划
连接器:
show processlist; 查看当前连接
查询缓存
8.0没有了
不推荐使用查询缓存
1.查询缓存的失效比较频繁,只要表更新,缓存就会清空
2.缓存对应新更新的数据命中率比较低
分析器
优化器
RBO:规则优化
CBO:成本优化
MySql事务
ACID
日志
binlog
服务端日志文件
默认关闭的
show variables like ‘%log_%’;

redolog: 持久性
innodb存储引擎日志文件
undolog:原子性
