当前位置: 首页 > 科技观察

理解MySQL聚集索引和非聚集索引

时间:2023-03-20 14:28:09 科技观察

一、前言我们在开发或者面试的过程中经常会涉及到索引。今天我们就来详细分析索引的常用知识点。首先介绍一下mysql常用的存储引擎,接下来是索引分类。2、索引分类MySQL索引有逻辑分类和物理分类两种分类方式。3、逻辑分类有多种逻辑划分方式,如按功能划分、按组成索引的列数划分等。3.1.主键索引的功能划分:一张表只能有一个主键索引,不允许重复,不允许NULL主键索引:一张表只能有一个主键索引,不允许重复,不允许为NULLALTERTABLE表名ADDPRIMARYKEY(column_list);唯一索引:数据列不允许重复,允许NULL值。一个表可以有多个唯一索引。索引列的值必须是唯一的,但允许NULL值。如果是复合索引,列值的组合必须是唯一的普通索引:一张表可以创建多个普通索引,普通索引可以包含多个字段,允许数据重复,允许插入NULL值;CREATEINDEXIndexNameON`TableName`(`fieldname`(length));#orALTERTABLETableNameADDINDEXIndexName(`fieldname`(length));全文索引:在文本中寻找关键词,主要用于全文检索。按列数划分单列索引:一个索引只包含一列,一张表可以有多个单例索引。复合索引:复合索引包含两个或多个列。查询时遵循最左前缀原则3.2。物理分类(重点)聚簇索引把数据存储和索引放在一起,找索引找数据。非聚集索引将数据和索引分开存储,索引结构的叶子节点指向数据对应的位置。4.不同存储引擎中索引放置的区别。存储引擎MyISAM:*.frm:表相关的元数据信息存储在frm文件中,包括表结构的定义信息等*.MYD:MyISAMDATA,用于存储MyISAM表的数据*.MYI:MyISAMINDEX,用于存放MyISAM表InnoDB的索引相关信息:*.frm:frm文件中存放了与表相关的元数据信息,包括表结构的定义信息等。*.ibd:InnoDBDATA、表数据和索引文件。表的索引(B+树)的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。5、假设用户(t_user)如下**6。聚集索引(也叫聚簇索引)主键索引InnoDB只有一个文件(.ibd文件),那么索引放在哪里呢?在InnoDB中,它使用主键作为索引来组织数据存储,所以索引文件和数据文件是同一个文件,都在.ibd文件中。在InnoDB的主键索引的叶子节点上,直接存放了我们的数据。辅助索引假设在NAME列上创建了一个索引,name的索引B+树如下。查询IO的图形表示如下:主键索引和辅助索引配合查询非聚集索引。主键索引和非聚集索引都有一个“指针”直接在叶子节点上,指向要查询的数据区的辅助索引在MyISAM中,辅助索引也在这个.MYI文件中。辅助索引和主键索引在存储和检索数据的方式上没有区别。在索引文件中找到磁盘地址,然后在数据文件中获取数据。