index record contains only the indexed field and a pointer to the original record, it stands to the reson that it will be smaller the multifield record that it points to.
- 预备知识
1、mysql 可以在表这个级别上选取自己的存储引擎,不同的表可以选取不同的存储引擎,默认的存储引擎是InnoDB。mysql的整体架构如下(InnoDB支持事务、表行锁、外键)
2、m阶B树
定义:根结点至少两个孩子、除根结点外关键字个数范围[(m+1)/2 - 1, m - 1]、叶节点不存储数据 、关键字左边的数据都比关键字小 右边的数据都比关键字大
3、m阶B+树
定义:B+树的非叶子结点不存储数据,只存储索引。叶子结点可以覆盖所有指向主文件的指针。每个非叶结点存储的索引项变多。
B+树 和B树 可以看做是多级索引。B+树的优势是大数据量下存储数据时建立的索引比B树更加矮胖。查询性能更加稳定。
有关B+树的插入删除操作:主要是明白什么情况下进行结点的分裂 与合并。
- 索引相关
mysql InnoDB 支持B+树数据结构的索引,MyISAM 支持Hash索引。(mysql 支持 InnoDB 、myISAM 等存储引擎 自然就有 哈希索引 和BTREE索引)
聚集索引定义是:索引文件中相邻的记录,主文件中也相邻。mysql中的InnoDB数据存储也是依赖于主键,根据主键排序,然后存储,主键索引的叶子结点不仅存储主键值,而且存储表中的每行的完整记录。
回表的问题:当我们使用主键查询数据是当然一次便可以查询到数据,但是我们用唯一索引或者普通索引查询数据时,若还需要更多字段的信息,则必须通过非聚集索引找到主键,再用主键查询数据,可知查了两次索引,第二次就是回表。
避免回表:建立联合索引从而覆盖索引,即只查索引就可以得到需要的数据列。