mysql中聚簇索引与非聚簇索引的区别是什么-创新互联
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
成都创新互联服务项目包括桂阳网站建设、桂阳网站制作、桂阳网页制作以及桂阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,桂阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到桂阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!mysql中聚簇索引与非聚簇索引的区别是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
通常情况下,建立索引是加快查询速度的有效手段。但索引不是万能的,靠索引并不能实现对所有数据的快速存取。事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查询性能。因此在实际使用当中,应该充分考虑到索引的开销,包括磁盘空间的开销及处理开销(如资源竞争和加锁)。例如,如果数据频繁的更新或删加,就不宜建立索引。
mysql聚簇索引和非聚簇索引的介绍:
聚簇索引:
表数据按顺序存储,即索引顺序和表记录物理存储顺序一致。
聚簇索引 叶子节点存储数据行和B-Tree索引。
在一个表中只能有一个聚簇索引,因为真实物理存储顺序只能有一种。
聚簇索引是稀疏索引,数据页上一级索引存储是页指针,非行指针。
非聚簇索引:
表数据存储顺序与索引顺序无关。
对于非聚簇索引,叶节点包含行主键值和主键值作为指向行的“指针”,通过二级索引查找,两次B-Tree查找 InnoDB自适应哈希索引能够减少这样重复工作。
非聚簇索引是密集索引,在数据页的上一级索引页它为每一个数据行存储一条记录。
- 存储特点:
- 1、聚集索引。表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。
- 2、非聚集索引。表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。
总结一下:聚集索引是一种稀疏索引,数据页上一级的索引页存储的是页指针,而不是行指针。而对于非聚集索引,则是密集索引,在数据页的上一级索引页它为每一个数据行存储一条索引记录。
- 更新表数据:
1、向表中插入新数据行
如果一张表没有聚集索引,那么它被称为“堆集”(Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加到表的末尾位置。而建立了聚簇索引的数据表则不同:最简单的情况下,插入操作根据索引找到对应的数据页,然后通过挪动已有的记录为新数据腾出空间,最后插入数据。如果数据页已满,则需要拆分数据页,调整索引指针(且如果表还有非聚集索引,还需要更新这些索引指向新的数据页)。而类似于自增列为聚集索引的,数据库系统可能并不拆分数据页,而只是简单的新添数据页。
2、从表中删除数据行
对删除数据行来说:删除行将导致其下方的数据行向上移动以填充删除记录造成的空白。如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即所谓的“索引合并”。
关于mysql中聚簇索引与非聚簇索引的区别是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联-成都网站建设公司行业资讯频道了解更多相关知识。
名称栏目:mysql中聚簇索引与非聚簇索引的区别是什么-创新互联
链接分享:http://cdiso.cn/article/dceojg.html