主键索引-聚簇索引

  • B+树
    • 索引页/数据页里的数据都是组成一个单项链表,从小打到排序
    • 索引页/数据页之间组成双向链表
  • 非叶子节点:
    • 索引页存放索引目录:索引页(数据页)地址和最小主键值
    • 索引页按从小到达顺序排列
  • 叶子结点

    • 存放数据页面
    • 双向链表连接

      非主键索引-非聚簇索引

  • B+树

  • 叶子结点存放索引值和主键ID
  • 回表

    索引的缺点

    空间

  • 更多的索引,意味着要建立更多的B+数,占用更多空间

    时间

  • 由于要维护索引页和数据页内部的有序性,并且页面之间也要保证上一个页面所有的值大于下一个页面所有的值,所以对数据进行增删改时候,为了保证这种有序性能,可能回进行数据或数据页的挪动

  • 大量插入数据时候,可能会发生页分裂

    普通索引和唯一索引区别

  • 普通索引需要查询到满足条件的记录后,还需要查询到下一个不满足条件的记录才会返回

  • 唯一索引,查询到第一条满足条件的记录就会返回

    索引规则

    联合索引

    等值匹配规则

  • where后的条件字段和和联合索引字段完全一样,且都是等值查询

  • 那么肯定会用到这个联合索引,即使where后条件字段顺序和联合索引不一样
  • mysql会自动优化,按照联合索引字段顺序查询

    最左列匹配

  • 当你等值查询条件字段数小于联合索引字段数时候

  • 条件字段必须满足最左列的匹配,索引才能生效

    最左前缀匹配


  • 范围查找规则

  • where用到范围查询,那么只有对联合索引最左列进行才能用到索引

    覆盖索引


  • 使用规范

  • where 后的条件字段、order by排序和group by分组,尽量使用索引字段

  • 尽量使用基数比较大的字段建立索引,这样才能发挥B+树的优势
  • 但表最多建立两三个联合索引,覆盖百分之九十以上的查询需求
  • 使用自增主键