聚集索引和非聚集索引

前言

  1. InnoDB的索引数据结构是B+树,主键索引叶子结点的值存储的是MySQL的数据行,普通索引的叶子结点的值存储的是主键值。

1、聚集索引

  1. 聚集索引就是可以根据可以索引直接查找到数据,而不会再有回表过程的索引,主键索引就是聚集索引。
  2. 举例:
    mysql> create table T(
    id int primary key,  //主键
    k int not null, //字段k
    name varchar(16),
    index (k))engine=InnoDB;//给k建立索引,引擎是innodb
    
    insert into(id,k) values (100,1),(200,2),(500,5),(600,6)
    
    此时id是主键,现在的索引是id、k,那么两棵索引树的示意图:
    在这里插入图片描述
    假如此时的sql语句为
    select * from T where Id = 500
    
    那么,此时是可以根据查找到所需要的数据。

2、非聚集索引

  1. 索引的存储和数据的存储是分离的,即:通过索引但是没有找到数据,需要根据索引上的值再次回表查询,这就是非聚集索引。
  2. sql语句为
    select * from T where k = 5
    
    那么,就会先去k的索引树取查找k=5得到ID值为500,然后拿着ID=500再去ID索引树再搜索一次,要进行回表的。

3、二者区别

  1. 通过聚集索引可以一次查找到需要的数据,非聚集索引需要回表才能找到需要的数据。
  2. 一张表聚集索引只能有一个,而非聚集索引可以有多个。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值