zoukankan      html  css  js  c++  java
  • MySQL聚集索引与辅助索引的区别

       聚集索引也称聚簇索引,英文为clustered index。从物理存储角度来分, 索引可以分为聚集索引和辅助索引(secondary index,也称作非聚簇索引),区别主要看叶子节点存了什么数据,即聚集索引的叶子节点存放所有数据,而非聚集索引仍然是索引节点,只不过有一个指针指向对应的数据块。

       索引和数据放在一个数据结构中,innodb的主键索引就是一个聚簇索引,一个表只有一个聚簇索引,是一种B+tree的树状结构,非叶子节点之存储索引值和子节点地址,叶子节点存储数据。

       聚集索引与辅助索引相同点和区别:
       相同点:数据结构都是B+树,即高度是平衡的,叶子结点存放着所有的数据。
       不同点:聚集索引叶子结点存放的是一整行的信息,辅助索引的叶子节点不包含行记录的全部数据。

       聚簇索引的叶子节点存放的是数据节点,而辅助索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。

       主键一定是聚簇索引,如果开发人员不手动设置 主键,那么MySQL会默认使用非空的 Unique 索引,若没有非空的 Unique 索引,则会使用数据库内部的一个行的 id 来当作主键索引,其它普通索引需要区分SQL 场景,当 SQL 查询的列就是索引本身时,我们称这种场景下该普通索引也可以叫做聚簇索引,MyisAM 引擎没有聚簇索引。

       一张表只允许存在一个聚簇索引 , 因为数据一旦存储,顺序只能有一种。但是,一个表可以有多个非聚簇索引 。

       辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引,但只能有一个聚集索引。当通过辅助索引来寻找数据时, InnoDB存储引擎会遍历辅助索引并通过叶子级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录。


      读后有收获,小礼物走一走,请作者喝咖啡。

    赞赏支持

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/east7/p/14775017.html
Copyright © 2011-2022 走看看