聚簇索引和非聚簇索引的区别

文章详细介绍了数据库中的聚簇索引和非聚簇索引,指出在InnoDB中主键建立聚簇索引,非聚簇索引(辅助索引)存储数据行地址。聚簇索引优点包括快速获取数据和排序,但大主键可能导致效率降低。非聚簇索引可能需要回表查询。覆盖索引能提升查询性能,应避免无谓的回表操作。
摘要由CSDN通过智能技术生成

聚簇索引:聚簇索引就是指数据与索引放到一块,同时叶子节点中存放行数据也将聚簇索引的叶子节点称为数据页。

在 InnoDB 中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则MySQL自动为InnoDB表生成一个隐含字段来建立聚簇索引,这个字段长度为6个字节,类型为长整形。

优点:根据索引可以直接获取值,所以他获取数据更快;对于主键的排序查找和范围查找效率更高;当查询使用聚簇索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。

缺点:如果主键值很大的话,辅助索引也会变得很大;如果用uuid作为主键,数据存储会很稀疏;修改主键或乱序插入会让数据行移动导致页分裂;所以一般我们定义主键时尽量让主键值小,并且定义为自增和不可修改。

非聚簇索引(辅助索引):数据与索引分开存储,叶子节点存放的是数据行地址,先根据索引找到数据地址,再根据地址去找数据。一般我们自己定义的索引都是非聚簇索引。非聚簇索引不一定会回表查询,这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再进行回表查询。

举个简单的例子,假设我们在员工表的年龄上建立了索引,那么当进行select age from employee where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询。

他们都是b+数结构

什么是回表查询:,回表的意思就是通过二级索引找到对应的主键值,然后再通过主键值找到聚集索引 中所对应的整行数据,这个过程就是回表

什么叫覆盖索引:覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。 如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触 发回表查询,尽量避免使用select *,尽量在返回的列中都包含添加索引的字 段

聚簇索引聚簇索引是数据库中两种不同的索引类型,它们的区别主要体现在数据的组织方式和索引访问的效果上。 聚簇索引是一种按照索引键的顺序来组织表中数据的方法。在一个表中只能有一个聚簇索引,因此每个表只能按照一种方式进行组织。聚簇索引的叶节点包含了表中的数据行,数据行按照聚簇索引键的顺序存储在磁盘上,相邻的数据行通常也会存储在相邻的物理块上。由于聚簇索引决定了数据的物理存储顺序,因此对于按照聚簇索引键进行查询时,可以获得较好的性能。 聚簇索引是一种单独存放索引数据和表数据的方法。在一个表中可以有多个聚簇索引,每个聚簇索引都有一个独立的叶节点,叶节点中包含了索引键和指向对应数据行的指针。由于聚簇索引和表数据是分开存储的,因此它们之间的物理存储顺序没有直接关联。当使用聚簇索引进行查询时,需要先通过索引找到对应的指针,再根据指针找到对应的数据行。相比于聚簇索引聚簇索引的查询性能通常较低。 总结起来,聚簇索引聚簇索引区别主要有两点:数据的组织方式和索引访问的效果。聚簇索引按照索引键的顺序组织数据,适合按照聚簇索引键进行查询;聚簇索引和表数据分开存储,查询时需要通过索引键找到对应的指针再找到数据行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值