我们可以将索引理解为书的目录,通过索引可以使查询效率更高。
主键默认是添加索引的。
索引是帮助 MySql 高效获取数据的数据结构。
例如:主键 。 主键会默认添加索引。
主键维护在一个 B+ 树中,保持这条记录的物理地址。
优势:
劣势:
mysql 索引使用 B+ 树结构存储索引
B+ 树是有序的,每个节点可以存储多个数据(横向扩展)
非叶子节点不存储数据,只存储索引,一个节点中就可以存储多个索引
所有的数据存储在叶子节点中,每个叶子节点之间有指针指向
使用索引有序的节省了排序时间,一个节点中可以存储多个元素,从而使树高度降低了,并且叶子节点之间有指针,便于区间范围查询。
聚簇索引:找到索引就找到了数据。
例如:innodb 引擎。索引和数据在同一个文件中,找到索引也就可以找到数据。(使用主键作为条件进行查询;如果使用其他列进行查询的话,查询的结果就只有自己)
非聚簇索引:找到了索引以后,还需要回表查询。
例如:myisam 引擎。索引和数据不在同一个文件中,找到索引后,就要去存储数据的文件中查找数据。
innodb 非聚簇:使用其他列作为条件进行查询,查询结果除了本列以外还有其他列的内容,这种情况就需要通过该列先查询到主键,然后通过主键再次回表查询数据。