精华内容
下载资源
问答
  • 聚簇索引:MySQL InnoDB表,聚簇索引就是主键索引,一个InnoDB表只能...非聚簇索引:非聚集索引就是二级索引,所有普通索引(非聚簇)都是二级索引; 非聚簇索引=二级索引=普通索引 ; 普通列:没有建立索引的列; ...

    聚簇索引:MySQL InnoDB表,聚簇索引就是主键索引,一个InnoDB表只能有1个(有且只有)聚簇索引,数据行和相邻的键值紧凑地存储在一起,不可能有两个聚簇索引;叶子节点存的是整行数据,直接通过这个聚集索引的键值找到某行;

    非聚簇索引:非聚集索引就是二级索引,所有普通索引(非聚簇)都是二级索引;

    非聚簇索引=二级索引=普通索引 ;

    普通列:没有建立索引的列;

    展开全文
  • MySQL中Innodb的聚簇索引和非聚簇索引

    万次阅读 热门讨论 2018-08-29 22:22:15
    数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种。Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下...

    聚簇索引

    数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种。Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下一层页面的指针。“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。一个表只能有一个聚簇索引,因为在一个表中数据的存放方式只有一种。

    一般来说,将通过主键作为聚簇索引的索引列,也就是通过主键聚集数据。下图展示了Innodb中聚簇索引的结构(图片来自《高性能MySQL(第三版)》):

    聚簇索引的结构

    聚簇索引的结构

    这里要特别注意的概念,一个页可以理解为一块具有一定大小的连续的存储区域。相同页内的数据行在物理上是相邻的,因此逻辑上键值相邻的页在物理上可能相隔很远。

    在中间的某个节点页中,主键<11的叶子页和11<主键<21的叶子页分别被两个指针所指向,且主键<11的叶子页也有一个指针指向了11<主键<21的叶子页,其余页之间的关系也是一样。

    聚簇索引的优点

    1. 聚簇索引将索引和数据行保存在同一个B-Tree中,查询通过聚簇索引可以直接获取数据,相比非聚簇索引需要第二次查询(非覆盖索引的情况下)效率要高。
    2. 聚簇索引对于范围查询的效率很高,因为其数据是按照大小排列的,

    聚簇索引的缺点

    1. 聚簇索引的更新代价比较高,如果更新了行的聚簇索引列,就需要将数据移动到相应的位置。这可能因为要插入的页已满而导致“页分裂”。
    2. 插入速度严重依赖于插入顺序,按照主键进行插入的速度是加载数据到Innodb中的最快方式。如果不是按照主键插入,最好在加载完成后使用OPTIMIZE TABLE命令重新组织一下表。
    3. 聚簇索引在插入新行和更新主键时,可能导致“页分裂”问题。
    4. 聚簇索引可能导致全表扫描速度变慢,因为可能需要加载物理上相隔较远的页到内存中(需要耗时的磁盘寻道操作)。

    非聚簇索引

    非聚簇索引,又叫二级索引。二级索引的叶子节点中保存的不是指向行的物理指针,而是行的主键值。当通过二级索引查找行,存储引擎需要在二级索引中找到相应的叶子节点,获得行的主键值,然后使用主键去聚簇索引中查找数据行,这需要两次B-Tree查找。

    总结

    下面是Innodb聚簇索引和非聚簇索引的示意图(图片来自《高性能MySQL(第三版)》:

    Innodb聚簇索引和非聚簇索引

    Innodb聚簇索引和非聚簇索引

    展开全文
  • MySQL InnoDB聚簇索引和非聚簇索引 出处:http://cmsblogs.com/?p=5463 每个InnoDB表都一个称为 [聚簇索引] 的特殊索引,通常情况下,这个聚簇索引就是主键,InnoDB使用它存储表中的每一行数据。 InnoDB如何使用聚簇...

    MySQL InnoDB聚簇索引和非聚簇索引

    出处:http://cmsblogs.com/?p=5463
    

    每个InnoDB表都有一个称为 [聚簇索引] 的特殊索引,通常情况下,这个聚簇索引就是主键,InnoDB使用它存储表中的每一行数据。

    InnoDB如何使用聚簇索引来优化每个表的最常见检索和DML操作方式:

    • 当我们在一个InnoDB表上定义了一个主键,InnoDB默认会使用它作为聚簇索引。
      使用InnoDB存储引擎时,建议为每个表都添加一个主键。如果该表没有一个逻辑唯一且非空列或列集合,那么可以添加一个带有 AUTO_INCREMENT 约束的自增列作为主键,InnoDB 会自动填充该列。

    • 如果某个 InnoDB 表并没有定义主键。那么 InnoDB 会查找第一个 「 唯一索引 」( UNIQUE Index ) ,因为唯一索引的所有键 ( key ) 都是 NOT ,因此可以用来作为聚簇索引。

    • 如果某个 InnoDB 表既没有定义主键,也没有一个合适的唯一索引。InnoDB 会在内部生成一个名为 GEN_CLUST_INDEX 的隐式的聚簇索引。

       该聚簇索引的键 ( key ) 会包含一个自动为行生成的 ID 值 ( 行号 ) 。
      
       该表中的所有行会按 InnoDB 分配给此类表中的行的 ID 排序。
       
       行 ID 是一个 6 字节的字段,在插入新行时会单调自增。
       
       因此,可以认为物理上的行保存顺序就是该行 ID 排序的排序顺序
      

    聚簇索引如何加快查询速度

    通过聚簇索引访问行很快,因为索引搜索直接指向包含所有行数据页 ( data page )。
    如果表很大,与那种索引页与数据页分离的 MyISAM 存储引擎相比, 聚簇索引体系结构通常可以节省磁盘 I/O 操作。

    非聚簇索引和聚簇索引的关系

    非聚簇索引,通常也称之为 「 二级索引 」 ( Secondary Indexes ) 或 「 辅助索引 」 ,一般是指聚簇索引之外的所有其它的索引。
    在 InnoDB 中,每个辅助索引中的每条记录都会包含该行的主键列 ( 也就是聚簇索引的键 ) ,以及为辅助索引指定的列。InnoDB 使用此主键值来搜索聚簇索引中的行

    如果主键很长,那么辅助索引就会占用更多空间,因此使用短主键是有利的,也是我们所推荐的。

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

    1.首先,我们要认识到聚簇索引和非聚簇索引的划分依据是什么 ?
    答案就是 InnoDB 会使用聚簇索索引来保存数据,而非聚簇索引的目的仅仅是加快查询速度

    2.在第一点认知基础上,我们就可以知道,聚簇索引是唯一的,一个 InnoDB 表只有一个聚簇索引,而且一定会有一个聚簇索引,如果不存在,Innodb 存储引擎会自动添加一个

    3.非聚簇所以可以有多个,而且只能由用户自己添加,InnoDB 默认并不会创建任何非聚簇索引。
    非聚簇索引中一定包含了聚簇索引的列值,但反过来却不存在。
    因此,使用非聚簇索引查询数据一定会用到聚簇索引,但反过来却不存在。

    展开全文
  • 数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种。Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下...

    聚簇索引

    数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种。Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下一层页面的指针。“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。一个表只能有一个聚簇索引,因为在一个表中数据的存放方式只有一种。

    一般来说,将通过主键作为聚簇索引的索引列,也就是通过主键聚集数据。下图展示了Innodb中聚簇索引的结构(图片来自《高性能MySQL(第三版)》):

    聚簇索引的结构

    聚簇索引的结构

    这里要特别注意的概念,一个页可以理解为一块具有一定大小的连续的存储区域。相同页内的数据行在物理上是相邻的,因此逻辑上键值相邻的页在物理上可能相隔很远。

    在中间的某个节点页中,主键<11的叶子页和11<主键<21的叶子页分别被两个指针所指向,且主键<11的叶子页也有一个指针指向了11<主键<21的叶子页,其余页之间的关系也是一样。

    聚簇索引的优点

    1. 聚簇索引将索引和数据行保存在同一个B-Tree中,查询通过聚簇索引可以直接获取数据,相比非聚簇索引需要第二次查询(非覆盖索引的情况下)效率要高。
    2. 聚簇索引对于范围查询的效率很高,因为其数据是按照大小排列的,

    聚簇索引的缺点

    1. 聚簇索引的更新代价比较高,如果更新了行的聚簇索引列,就需要将数据移动到相应的位置。这可能因为要插入的页已满而导致“页分裂”。
    2. 插入速度严重依赖于插入顺序,按照主键进行插入的速度是加载数据到Innodb中的最快方式。如果不是按照主键插入,最好在加载完成后使用OPTIMIZE TABLE命令重新组织一下表。
    3. 聚簇索引在插入新行和更新主键时,可能导致“页分裂”问题。
    4. 聚簇索引可能导致全表扫描速度变慢,因为可能需要加载物理上相隔较远的页到内存中(需要耗时的磁盘寻道操作)。

    非聚簇索引

    非聚簇索引,又叫二级索引。二级索引的叶子节点中保存的不是指向行的物理指针,而是行的主键值。当通过二级索引查找行,存储引擎需要在二级索引中找到相应的叶子节点,获得行的主键值,然后使用主键去聚簇索引中查找数据行,这需要两次B-Tree查找。

    总结

    下面是Innodb聚簇索引和非聚簇索引的示意图(图片来自《高性能MySQL(第三版)》:

    Innodb聚簇索引和非聚簇索引

    Innodb聚簇索引和非聚簇索引

    展开全文
  • Innodb里面没有非聚簇索引,更加准确的叫法是辅助索引。 非聚簇索引针对MyISAM引擎而言。 每个InnoDB表都一个称之为聚簇索引(clustered index)的特殊索引,存储记录行数据。通常,聚簇索引和主索引是近义的。 l 当...
  • table Each MySQL table is associated with a particular storage ... InnoDB tables have particular physical and logical characteristics that affect performance, scalability, backup, administration, ...
  • MySQL数据库中InnoDB存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。这两种索引内部都是B+树,聚集索引...
  • 通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也...澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引
  • innodb聚簇索引和myisam非聚簇索引

    千次阅读 2016-07-26 10:17:52
    非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘...
  • ###概述:聚簇索引并不是一种单纯的索引类型,而是一种数据存储方式。...因为无法同时把数据行存放在两个不同的地方,所以一个表只能一个聚簇索引(不过,覆盖索引可以模拟多个聚簇索引的情况...
  • (1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。 (2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此,...
  • 簇(cù):数据存储在硬盘的时候,是以簇为单位。所以无论文件大小是多少,除非正好是簇大小...在刚开始接触到聚簇索引和非聚簇索引的时候,直观理解成聚簇索引就是在索引在一起,非聚簇索引就是索引不在一起。这个...
  • 我的归纳:(1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。(2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。...
  • (1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。 (2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此...
  • 其实之前在学校的数据库课程上,我一直以为聚簇索引是一种索引类型,然后结合InnoDB存储引擎,自然而然的便认为聚簇索引即表中的B+树主键索引,殊不知一直理解的是错误的概念,前阵子在学习<高性能MySQL>这...
  • MySQL数据库分为聚簇索引和非聚簇索引两种,也人称为聚集索引和非聚集索引。 需要注意的是,聚簇索引和非聚簇索引不是一种单独的索引类型,而是一种数据存储方式。 1.索引的实现 聚簇索引和非聚簇索引,都是使用 B...
  • inoodb 是使用b+树来实现索引功能的。 一、 B+树和B树的区别 B树种的同一键不会出现多次,可能在叶子节点上也可能在叶子节点上; b+树的键一定会出现在叶子节点上,同时也可能在叶子节点上重复出现。 ...
  • 目录 聚簇索引(聚集索引) ...B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。这两种索引内部都是
  • 这篇文章主要介绍mysql中innodb的聚簇索引和非聚簇索引,那首先我们要先看下聚簇索引和非聚簇索引的概念是什么,是干什么用的. 聚簇索引和非聚簇索引的概念 我们先引用官网上的一段话来看看它们是干嘛的 Every InnoDB ...
  • 上一篇讲MySQL索引的文章没有提到聚簇索引和非聚簇索引,这一片就来看一下这两个具体是什么以及优缺点。 聚簇索引 & 非聚簇索引 聚集索引与非聚集索引的区别是:叶节点是否存放一整行记录 InnoDB 主键使用...
  • innodb中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。辅助索引叶子节点存储的不再是行的物理位置,而是主键值,辅助索引访问数据总是需要二次查找。 ...
  • 聚簇索引和非聚簇索引详解  聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(类似于Oracle的...下图形象说明了聚簇索引表(InnoDB)和非聚簇索引(MyIS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,220
精华内容 6,088
关键字:

innodb有没有非聚簇索引