MySQL学习笔记 day2

数据库的索引

  1. innoDB索引为什么会是B+树?
    哈希结构:支持等值查询,但是不支持范围查找
    二分:插入数据时复杂度高
    平衡二叉树:树层数太高,磁盘IO速度很慢不可取
    因此innoDB的结构是一颗B+树,非叶子结点只存储索引不存储数据,这样能使树的高度较低,减少IO次数,并且每个节点大小是4MB,操作系统页的单位,然后对于主键索引来说,叶子结点存储的是整行的数据,而对于主键索引来说存储的是主键的值,因此通过非主键索引查找,非索引上的列,就需要回表,回表操作是在引擎内部进行的,因此不会算在扫描行数。】
  2. 为什么一般会选取自增主键呢?
  3. 因为自增主键一般是int类型,比起string类型来说非主键索引的叶子结点占有的空间会更小。并且自增索引因为是自增的,插入的时候就不会造成结点的分裂,结点的分裂会影响性能并且降低页的利用率。除非是只有一个索引,并且需要是唯一索引,那么可以考虑不用自增主键。
  4. 什么是覆盖索引
    覆盖索引是指要查找的字段都在普通索引里,可以避免回表。这样叫覆盖索引。覆盖索引遵从最左前缀匹配原则,我们在设计索引的时候,要考虑好顺序。比如需要根据a b和b查询,那么索引顺序最好是联合索引ba,如果需要通过name和age、 name、 age查询,那么需要建两个索引name age和age,这样更省空间
  5. 什么是索引下推
    索引下推是指在回表之前,引擎会先通过非主键索引过滤掉不满足条件的行,减少回表次数

你可能感兴趣的:(MySQL学习笔记 day2)