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

引言

  聚簇索引并不是一种索引类型,只是一种存储方式。当表有了聚簇索引的时候,表的数据行都存放在索引树的叶子页中。无法把数据行放到两个不同的地方,所以一张表只允许有一个聚簇索引。
  索引使得大多数时候我们避免全表扫描,使数据的性能有一定的提高。而聚簇索引的影响力也是很大的。我们熟悉的Myisam和innodb两大引擎,innodb的默认数据结构是聚簇索引,而Myisam是非聚簇索引。
  
  Innodb是通过主键来聚集数据的,就是“被索引的列就是主键”。如果一张表没有主键,那就会通过某一唯一列来聚集数据,没有唯一列的时候,就会隐式的生成一个id,通过这个id来聚集数据。

区别

1. 在mysql安装目录上,我们也可以明显的看出两者的区别:
  这里写图片描述
  我们可在安装目录下查到这两个目录。这两个目录的My指的是Myisam引擎,D是data,i是index。
但是我们确找不到ini和ind之类的文件,只能查到一些idb文件。这也就是提现出聚簇索引和非聚簇索引的一点区别了:
  a):在Myisam引擎索引和数据是分开存储的,而Innodb是索引和数据是一起以idb文件的形式进行存储的。

  b):在访问速度上,聚簇索引比非聚簇索引快。非聚簇索引需要先查询一遍索引文件,得到索引,跟据索引获取数据。而聚簇索引的索引树的叶子节点的直接指向要查找的数据行。
  
2. :从二级索引查询看

这里写图片描述

  对于采用聚簇索引的innodb引擎的主键索引B+Tree和Myisam的主键索引树还有Myisam的二级索引B+Tree都是采用这样的结构。但是Innodb的二级索引B+Tree却是这样的:
  这里写图片描述

所以可以得出:
  在使用二级索引进行查询的时候,Innodb首先通过二级索引B+Tree得到数据行的主键索引,然后再通过主键索引树查询数据。所以在二级索引,Innodb的性能消耗比较大。
  但是,这种情况在innodb中有一定的优化,不是认为控制的,而是引擎实现的,通过二级索引查询多了,innodb会生成自适应的哈希索引。

扩展问题

  1. 根据B+Tree的插入过程,取什么样的主键会带来什么问题?

      使用自增主键比其它主键好,因为根据B+Tree的插入,主键采用自增主键会保证每次都在最后面增加叶子节点。不会带来新数据的插入,导致前面的数据变动,而产生页分裂,随之带来空间碎片和时间的消耗。

  2. 但是使用自增主键,这样的主键有上界啊,而且在并发的情况下怎么保证获取到的主键是正确的?怎么解决上界问题?

      对于并发怎么保证获取的主键是正确的,可以看innodb的Auto_increment锁机制。遇到这种问题则可能要考虑重新设计表,或者更改innodb_auotinc_lock_mode参数。
      对于上界问题,自己还没有更好的认识,有遇到过的朋友可以告诉一下解决方案。

还有很多问题需要理解,则还需要继续学。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值