innodb索引的几个问题?

从数据结构角度

1:B+树索引(o(logn)
2:hash索引 (key=>value)
3:全文索引
4:R-tree索引

物理角度

1:聚集索引
2:飞聚集索引

逻辑角度

1:主键索引
2:普通索引
3:唯一索引

为什么会选择B+树数据结构来存储数据

在B+树中,非叶子节点上是不存数据的,仅存储键值。因为在数据中的页大小是固定的,Innodb中页的默认大小是16kb,如果不存储数据,那么节点就可以存储更多的键值,相应的树的节数更大,对于同样的数据量来说,需要的树高就会变低。如此一来查询数据的时候进行磁盘的IO次数就会减少,提升查询效率。
由于B+树的节数等于键值数量,假设B+树的一个结点可以存储1000个键值,那么3层的B+树可以存储100010001000=10亿个数据。并且一般节点是常驻内存的,所以查找10亿个数据,只要两次IO
B+树的叶子节点中的索引数据是按照顺序排序的,并且叶子节点间是通过双向链表进行链接

主键索引和普通索引的差别

主键索引

主键索引的叶子节点存的整行数据,主键索引也称为聚簇索引

非主键索引

非主键索引的叶子节点内容存在的主键的值,非主键索引也成为二级索引或是普通索引

基于主键索引和普通索引的查询有什么区别?

主键索引,索引查询出来直接就是查询的值
非主键索引,先搜索查到主键索引,然后主键索引在搜索一次。这个过程成为回表

你可能感兴趣的:(innodb,索引)