多叉树(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_%’;选区_098.png选区_099.png
    redolog: 持久性
    innodb存储引擎日志文件
    选区_096.png
    undolog:原子性
    选区_097.png