主键索引和普通索引

2020-03-27  本文已影响0人  salix_

一:主键索引和普通索引的定义

主键索引:根据主键建立的索引
普通索引:除了主键索引

二:例子(网上找的图,主要看下面的解释)


主键索引和非主键索引的示意图如下:

从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

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进行查找。

上一篇 下一篇

猜你喜欢

热点阅读