mysql中什么是非聚簇索引?
mysql中非聚簇索引是索引的储备和数据的储备是别离的,也就是说寻到了索引但没寻到数据,需要按照索引上的值即主键再次回表查询,非聚簇索引也叫做辅助索引。
mysql中非聚簇索引是:
索引的储备和数据的储备是别离的,也就是说寻到了索引但没寻到数据,需要按照索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。
一个例子
下面我们创立了一个学生表,做三种查询,来说明什么状况下是聚簇索引,什么状况下不是。
create table student ( id bigint, no varchar(20) , name varchar(20) , address varchar(20) , PRIMARY KEY (`branch_id`) USING BTREE, UNIQUE KEY `idx_no` (`no`) USING BTREE )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
相关学习引荐:mysql视频教程
第一种,直接按照主键查询猎取所有字段数据,此时主键是聚簇索引,由于主键对应的索引叶子节点储备了id=1的所有字段的值。
select * from student where id = 1
第二种,按照编号查询编号和名称,编号本身是一个独一索引,但查询的列包括了学生编号和学生名称,当命中编号索引时,该索引的节点的数据储备的是主键ID,需要按照主键ID从新查询一次,所以这种查询下no不是聚簇索引
select no,name from student where no = 'test'
第三种,我们按照编号查询编号(有人会问知道编号了还要查询?要,你大概需要验证该编号在数据库中可否存在),这种查询命中编号索引时,直接返回编号,由于所需要的数据就是该索引,不需要回表查询,这种场景下no是聚簇索引
select no from student where no = 'test'
总结:
主键必然是聚簇索引,MySQL的InnoDB
中必然有主键,即使研发人员不手动设定,则会使用unique索引,没有unique索引,则会使用数据库内部的一个行的id来当作主键索引,其它一般索引需要区分SQL场景,当SQL查询的列就是索引本身时,我们称这种场景下该一般索引也可以叫做聚簇索引,MyisAM引擎没有聚簇索引。
以上就是mysql中什么是非聚簇索引?的具体内容,更多请关注百分百源码网其它相关文章!