数据库索引的简单分类
数据库的索引可以简单的分为四类:
-
主键索引。针对表的主键所创建的索引,这种索引是默认自动创建的,而且只能有一个。
-
唯一索引。避免表中某列的值重复,可以有多个唯一索引,在为某字段限定唯一约束时,会自动创建一个唯一索引。
-
常规索引。一般的用于快速定位检索数据的索引,可以有多个。
-
全文索引。查找的是文本中的关键词,用FULLTEXT关键字指定。
当然,上面的几类索引并不都是经常使用的。
在MySQL的InnoDB存储引擎中,根据索引的存储形式,又可以分为2类:
-
聚集索引。将数据和索引存储放到一起,索引结构的叶子节点保存行数据,因此聚集索引有且仅有一个。
-
二级索引。这种索引不与数据存储在一起,索引结构的叶子节点关联的是对应行数据的主键。
默认的情况下,主键索引就是聚集索引。实际上,存在没有主键的情况,聚集索引的选取规则如下:
-
有主键索引,则选择主键索引作为聚集索引。
-
没有主键索引,使用第一个唯一索引作为聚集索引。
-
如果没有主键索引或合适的唯一索引,InnoDB生成一个隐藏的rowid作为聚集索引。
通过这个规则保证聚集索引一定存在且唯一。
在根据二级索引对应的列进行查询时,不能直接通过主键上的聚集索引查询,需要首先通过字段对应的二级索引查找到对应行的主键id,再根据id回到聚集索引上查询到正确的行数据,因此需要进行两次索引查询(回表查询)。
如果二级索引与聚集索引一样,都直接把行数据存储到叶子节点上,数据会存储多份,造成空间的膨胀浪费。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!