`

mysql索引之聚集索引

阅读更多

聚集索引不是一种单独的索引类型,而是一种存储数据方式。其具体细节依赖于实现方式,但是InnoDB的聚集索引实际上在同样的结构中保存了B-Tree索引和数据行。


当表有聚集索引的时候,它的数据行实际保存在索引的叶子页中。术语“聚集”指实际的数据行和相关的键值都保存在一起。每个表只能有一个聚集索引,因为不能一次把行保存在两个地方。(但是,覆盖索引可以模拟多个聚集索引)


当前,SolidDB和InnoDB是唯一支持聚集索引的存储引擎。InnoDB按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。


聚集主键有助于性能,但是它也能导致严重的性能问题。


优点:

1.可以把相关数据保存在一起。

2.数据访问快。聚集索引把索引和数据都保存到同一棵B-Tree中,因此从聚集索引中取得数据通常在非聚集索引进行查找要快。

3.使用覆盖索引的查询可以使用包含在叶子节点中的主键值

如果表和查询可以使用它们,这些优点能极大地提高性能。


缺点:

1.聚集能最大限度地提升I/O密集负载的性能。如果数据能装入内存,那么其顺序也就无怕谓了,这样聚集就没什么用处。

2.插入速度严重依赖于插入顺序。按照主键的顺序插入行是把数据装入InnoDB表最快的方法。如果没有按照主键顺序插入数据,那么在插入之后最好使用OPTIMIZE TABLE重新组织一下表。

3.更新聚集索引列是昂贵的,因为它强制InnoDB把每个更新的迁移到新的位置。

3.建立在聚集索引上的表在插入新行,或者在行的主键被更新,该行必须被移动的时候会进行分页。分布发生在行的键值要求行必须被放到一个已经放满了数据的页的时候,此时存储引擎必须分页才能容纳该行。分页会导致表占用更多的磁盘空间

4.聚集表可能会比全表扫描慢,尤其在表存储得比较稀疏或因为分页而没有顺序存储的时候。

5.第二(非聚集)索引可能会比预想的大,因为它们的叶子节点包含了被引用行的主键列。

6.第二索引访问需要两次索引查找,而不是一次(叶子节点不会保存引用的行的物理位置,而是保持了行的主键值)


这意味着为了从第二索引查找行,存储引擎首先要找到叶子,然后使用保存在那里的主键值找到主键。最终找到行。这需要两次动作,两次B-Tree导航(在InnoDB中,自适应哈希索引能减少这种损失)


如果正在使用InnoDB并且不需要任何特定的聚集,就可以定义一个代理键。它是一种主键,但是值和应用程序无关。最简单的方法是使用AUTO_INCREMENT列。这会是顺序插入的并且能提高使用主键联接的性能,减少分页和碎片产生。



 

分享到:
评论

相关推荐

    MySQL索引 聚集索引

    MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。

    MySQL索引之聚集索引介绍

    在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别? 在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。 也有人把聚集索引...

    索引介绍聚集索引和非聚集索引

    关于索引的介绍,以及b+树结构图,两种索引性能比较,索引优化建议

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试 目录: 基本概念 MySQL索引结构的分类 Hash索引、B+树索引、全文索引、RTree索引。 B+树索引 B+树介绍,为什么选择B+树,非聚集索引 聚集索引 第一点、第二点...

    Mysql-索引原理分析

    1 .索引的存储结构是什么? 是B树、B+树还是二叉树 2.什么是聚集索引? 聚集索引的主键索引和次要索引区别是什么 3.什么是非聚集索引? 非聚集索引的主键索引和次要索引区别是什么

    MySQL索引之主键索引

    上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一...

    CcoWzh#Interview-Of-Programmer#MySQL索引原理1

    MySQL索引原理查找算法:二叉查找树BitMap位图索引分类主键索引唯一索引普通索引全文索引索引原理解析B+树聚集索引和非聚集索引建立索引创建表时指定组合索引

    详解mysql索引总结—-mysql索引类型以及创建

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能...

    关于MySQL面试题中有关索引的九大难点全在这里了

    o聚集索引:聚集索引就是以主键创建的索引,在叶子节点存储的是表中的数据。 o非聚集索引:非聚集索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列。 逻辑维度 o主键索引:一种特殊的唯一索引,不允许有...

    【数据库】浅析Innodb的聚集索引与非聚集索引

    Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。 本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈 在分析这两种...

    MySQL 索引及优化实战1

    1.聚集索引(Clustered Index) 2.非聚集索引(Non-clustered Index) 1. 普通索引:最基本的索引,它没有任何限制 2. 唯

    MySql 索引、锁、事务知识点小结

    索引从实现上说,分成 2 种:聚集索引和辅助索引(也叫二级索引或者非聚集索引) 从功能上说,分为 6 种:普通索引,唯一索引,主键索引,复合索引,外键索引,全文索引。 详细说说 6 种索引: 普通索引:最基本的...

    MySql数据库索引详解,索引看这一篇就够了

    6 主键索引,辅助索引,聚集索引,非聚集索引 6.1 MyISAM存储引擎-主键索引 6.2 MyISAM存储引擎-辅助索引 6.3 InnoDB存储引擎-主键索引 6.4 InnoDB存储引擎-辅助索引 7 索引的相关问题 7.1 索引的设计原则 7.2 一次...

    iSenninha#jianShuRecord#MySql索引1

    1.创建一个联合索引 2.为一个已经存在的表建立索引 1.若在创建的时候没有显式地指定主键,则InnoDB这自动创建一个6个字节的列作为主键 2.聚集索引是根据

    【MySQL】经验:索引使用场景

    InnoDB中会自动为主键建立聚集索引,即使没有定义主键,也会自动生成一个隐藏主键建立索引;MyISAM中不会自动生成主键。建议给每张表指定主键。 2、频繁作为查询条件的字段 索引是以空间换时间的,某字段如果频繁...

    Mysql使用索引的正确方法及索引原理详解

    索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的...

    常见(MySQL)面试题(含答案).docx

    聚集索引与非聚集索引的区别 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的存储引擎InnoDB、MyISAM的区别?【~】 ...

    mysql结构和索引简介.png

    mysql结构和索引简介,包含日志文件和数据文件的分析。索引的分类及其。聚集索引和非聚集索引的概念和区别 及其简单介绍B Tree 和B+ Tree的区别和概念

Global site tag (gtag.js) - Google Analytics