首页 > 其他分享 >聚集索引与非聚集索引的区别

聚集索引与非聚集索引的区别

时间:2024-03-05 20:22:19浏览次数:20  
标签:聚集 Tree 索引 键值 与非 搜索 主键

 

按照物理实现方式,索引可以分为两大类:

1)聚集索引:在聚集索引里,表中数据行按索引的排序方式进行存储,对查找行很有效。只有当表包含聚集索引时,表内的数据行才会按找索引列的值在磁盘上进行物理排序和存储。每张表只能有一个聚集索引,原因很简单,因为数据行本身只能按一个顺序存储。

2)非聚集索引:非聚集索引也称为二级索引或者辅助索引,对于非聚集索引,数据库会有单独的存储空间来存放。非聚集索引在查找的时候要经过两个步骤,需要先搜索非聚集索引的B+Tree,这个B+Tree的叶子结点存储的不是完整的数据行,而是主键值,当搜索完成后得到主键的值,然后拿着主键值再去搜索主键索引的B+Tree,就可以获取到一行完整的数据。

InnoDb:主键索引采用聚集索引,非主键索引是非聚集索引

MYISAM:均采用非聚集索引

通过聚集索引可以直接查询到一行的记录,不用回表查询;
但通过普通索引(非聚集索引)需要扫描两遍索引树。(即如果在查询中用到了非聚集索引,那么就会搜索两棵 B+Tree,第一次搜索 B+Tree 拿到主键值后再去搜索聚集索引的 B+Tree,这个过程就是所谓的回表。)

例如:

非聚集索引一般也称为二级索引或者辅助索引,对于非聚集索引,数据库会有单独的存储空间来存放。非聚集索引在查找的时候要经过两个步骤,例如执行 select * from user where username='goboy'(假设 username 字段是非聚集索引),那么此时需要先搜索 username 这一列索引的 B+Tree,这个 B+Tree 的叶子结点存储的不是完整的数据行,而是主键值,当搜索完成后得到主键的值,然后拿着主键值再去搜索主键索引的 B+Tree,就可以获取到一行完整的数据。

数据库索引可以按照两种思路来分类:按照功能分和按照存储方式分。

注意:主键索引是一种特殊的聚集索引,它是唯一的,并且在许多数据库管理系统中,主键索引是默认的聚集索引。在设计表结构时,应根据具体的需求选择合适的索引类型。如果需要快速查询和排序数据,则使用聚集索引;如果需要唯一标识表中的行,则使用主键索引。

标签:聚集,Tree,索引,键值,与非,搜索,主键
From: https://www.cnblogs.com/beatle-go/p/18054835

相关文章

  • SQL---索引
    今天我们一起学习并梳理一下数据库中的索引的知识,带着以下几个问题,去深入的了解。what:索引是什么?索引有哪几种类型?why:为什么要用到索引?作用是什么?优点和缺点?who:谁去使用?开发人员或测试人员where:在代码中或者sql查询中when:开发阶段、测试阶段、性能优化阶段how:怎么......
  • 使用 explain 索引优化(转)
    使用explain索引优化(转)原文:https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ==&mid=2247490262&idx=1&sn=a67f610afa984ecca130a54a3be453ab&source=41#wechat_redirect1、前言对于互联网公司来说,随着用户量和数据量的不断增加,慢查询是无法避免的问题。一般情况下如果出现慢......
  • C# 用foreach迭代集合时获取索引
    一般做法是循环外部定义index,内部累加值 staticvoidMain(string[]args){vararr=newList<string>(){"aaa","bbb","ccc"};varindex=0;foreach(varvalinarr){index++;Console.WriteLine($&quo......
  • MySQL之索引
    索引知识回顾:数据都是存在于硬盘上的,查询数据不可避免的需要进行IO操作索引:就是一种数据结构,类似于书的目录。意味着以后在查询数据的时候应该先找目录再找数据,而不是一页一页的番薯,从而提升查询熟读降低IO操作。索引在MySQL中也叫“键”,是存储引擎用于快速查找记录的一种数据......
  • 记一次在oracle数据库中添加全文索引的过程
    前景:在创建全文索引之前,有如下几个内容需要确认下:1.全文索引不支持nvarchar2类型,所以需要创建全文索引的字段的字段类型,如果是这个类型,可以修改为varchar2();2.如果需要创建全文索引的字段包含(1、中文、英文结合,或者纯英文;2、中文、数字结合,或者纯数字的)这几种情况的,需要对......
  • 3_静态类与非静态类的区别
    静态类与非静态类的区别?静态类无法实例化(换句话说,无法使用new运算符创建类类型的变量。由于不存在任何实例变量,因此可以使用类名本身访问静态类的成员)。静态构造函数只调用一次,在程序所驻留的应用程序域的生存期内,静态类会保留在内存中(即使用Static修饰的类,应用一旦启用静态类......
  • Elastic学习之旅 (5) 倒排索引和Analyzer分词
    大家好,我是Edison。上一篇:ES文档的CRUD操作重要概念1:倒排索引在学习ES时,倒排索引是一个非常重要的概念。要了解倒排索引,就得先知道什么是正排索引。举个简单的例子,书籍的目录页(从章节名称快速知道页码)其实就是一个典型的正排索引。而一般书籍的末尾部分的索引页,则是一个典型......
  • MongoDB 索引
    索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存......
  • MySQL 索引
    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索......
  • SQL Server中常见的索引类型
    1.聚集索引(ClusteredIndex):-聚集索引确定表中数据的物理存储顺序,并且表中只能有一个聚集索引。-聚集索引决定了表的物理排序方式,并且通常基于主键列或唯一约束。2.非聚集索引(NonclusteredIndex):-非聚集索引不会改变表中数据的物理存储顺序,而是创建一个独立的索引结......