一:主键索引和普通索引的定义
主键索引:根据主键建立的索引
普通索引:除了主键索引
二:例子(网上找的图,主要看下面的解释)
主键索引和非主键索引的示意图如下:
从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。
a:根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。
1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。
2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。
b:一定会回表吗?
并不是如此,如果要查询的字段包含在查询的索引里面,就不用再回表。(这就是所谓的mysql索引覆盖)
Mysql覆盖索引详解
三:主键索引的一些问题
1. 如果没主键,主键索引咋办?
mysql会创建一个隐藏列,叫rowid
给个链接https://blog.csdn.net/a158123/article/details/89818537
2.如果是联合主键,怎样建立聚簇索引
对于(a,b)建立的索引是以a为非叶子节点的key,(a,b)为叶子节点的key进行查找。
网友评论