Mysq|聚簇和非聚簇索引的区别?????

简介: Mysq|聚簇和非聚簇索引的区别?????

一、都是B+树的数据结构


●聚簇索引:将数据存储与索引放到了一块、并且是按照-定的顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引|顺序是一致的, 即:只要索引|是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的

●非聚簇索张:叶子节点不存储数据、存储的是数据行地址,也就是说根据索引查找到数据行的位置再取磁盘查找数据,这个就有点类似一本树的目录,比如我们要找第三章第一节,那我们先在这个目录里面找,找到对应的页码后再去对应的页码看文章。


二、优势


1、查询通过聚簇索引可以直接获取数据,相比非聚族索引需要第二次查询(非覆盖索引的情况下)效率要高

2、聚簇索引对于范围查询的效率很高,因为其数据是按照大小排列的

3、聚簇索引适合用在排序的场合,非聚簇索引不适合


三、劣势:


1、维护索引很昂贵,特别是插入新行或者主键被更新导至要分页(page split)的时候。 建议在大量插入新行后,选 在负载较低的时间段,通过OPTIMIZE TABLE优化表,因为必须被移动的行数据可能造成碎片。使用独享表空间可以弱化碎片

2、表因为使用UUId (随机ID)作为主键,使数据存储稀疏,这就会出现聚族索引有可能有比全表扫面更慢,所以建议使用int的auto_ increment作为主键

3、如果主键比较大的话,那辅助索引将会变的更大,因为辅助索引的叶子存储的是主键值:过长的主键值,会导致非叶子节点占用占用更多的物理空间


InnoDB中一定有主键, 主键一定是聚簇索引, 不手动设置、则会使用unique索引,没有unique索引, 则会使用数据库内部的一个行的隐藏id来当作主键索引。在聚簇索引之上创建的索弓称之为辅助索引,辅助索弓|访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引, 辅助索引叶子节点存储的不再是行的物理位置,而是主键值。


MyISM使用的是非聚簇索引,没有聚簇索引,非聚簇索引|的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引|B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通过辅助键检索无需访问主键的索弓|树。

如果涉及到大数据量的排序、全表扫描、count之 类的操作的话,还是MyISAM占优势些,因为索引所占空间小,这些操作是需要在内存中完成的。


五、B+树与哈希索引


索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,InnoDB存储弓|擎的默认索引实现为: B+树索引。对于哈希索弓l来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。


B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。 在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索弓|的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。因此,B+树索引被广泛应用于数据库、文件系统等场景。

目录
相关文章
|
3月前
|
存储 SQL 关系型数据库
mysql中主键索引和联合索引的原理与区别
本文详细介绍了MySQL中的主键索引和联合索引原理及其区别。主键索引按主键值排序,叶节点仅存储数据区,而索引页则存储索引和指向数据域的指针。联合索引由多个字段组成,遵循最左前缀原则,可提高查询效率。文章还探讨了索引扫描原理、索引失效情况及设计原则,并对比了InnoDB与MyISAM存储引擎中聚簇索引和非聚簇索引的特点。对于优化MySQL性能具有参考价值。
|
8月前
|
存储 关系型数据库 MySQL
MySQL - 聚簇索引和非聚簇索引
MySQL - 聚簇索引和非聚簇索引
111 0
|
8月前
|
存储 索引
聚集索引与非聚集索引的区别
聚集索引与非聚集索引的区别
|
存储 关系型数据库 MySQL
Mysql什么是聚簇索引什么是非聚簇索引 ?
在MySQL中,聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)是两种不同的索引类型。
146 0
|
存储 数据库 索引
聚簇索引什么是非聚簇
聚簇索引和非聚簇索引是数据库中常见的两种索引类型,它们在索引数据的组织方式和存储结构上有所不同。下面我将详细介绍聚簇索引和非聚簇索引的概念、特点和使用场景。
85 0
|
存储 关系型数据库 MySQL
【MySQL从入门到精通】【高级篇】(八)聚簇索引&非聚簇索引&联合索引
上一篇文章我们介绍了【MySQL从入门到精通】【高级篇】(七)设计一个索引&InnoDB中的索引方案,该文介绍了如何设计一个索引,以及InnoDB中的索引如何形成。
343 0
【MySQL从入门到精通】【高级篇】(八)聚簇索引&非聚簇索引&联合索引
|
存储 关系型数据库 MySQL
MySQL InnoDB表和索引之聚簇索引与第二索引
MySQL InnoDB表和索引之聚簇索引与第二索引
98 0
|
存储 关系型数据库 MySQL
mysql聚簇索引和非聚簇索引
mysql聚簇索引和非聚簇索引
164 0
|
存储 关系型数据库 MySQL
【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引
【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引
【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引
|
存储 SQL 关系型数据库
Mysql 二级索引回表知识点:顺序I/O & 随机I/O
Mysql 二级索引回表知识点:顺序I/O & 随机I/O
412 0
Mysql 二级索引回表知识点:顺序I/O & 随机I/O