前提:
在数据库中,1、索引分为聚簇索引和非聚簇索引两类。2、所有索引的数据结构都是树,查找树上的节点数据时通过用二分法来锁定数据范围,指定数据排序的规则,比如:有小到大,对比之后最终确定数据。
聚簇索引(Clustered Index)决定了数据在磁盘上的物理存储顺序,而且一个表只能有一个聚簇索引。在许多数据库系统中,如果表没有定义主键,那么通常会自动为表创建一个聚簇索引,这时主键索引就充当了聚簇索引的角色。当然如果有主键的时候(这个主键只能是直接手动创建,系统默认的不算),自己也可以创建聚簇索引(CREATE CLUSTERED INDEX idx_name ON table_name (column_name);)。
非聚簇索引则包括多种类型,其中包括普通索引、唯一索引、全文索引、空间索引等。
非聚簇索引的就是二级索引,当我们在数据库中频繁使用某一个列作为查询条件的时候,数据库会自动帮我们创建该列作为二级索引,一定要是非常频繁才行哦。
二级索引(非聚簇索引)有哪些呢?
在数据库中,二级索引也称为辅助索引或非聚簇索引,用于优化对非主键列的查询。以下是常见的二级索引类型:
普通索引(Non-Unique Index):最常见的二级索引类型。允许在索引列上有重复值,并且可以用于查找任意的匹配行。普通索引的创建可以提高对非聚簇索引列的查询效率,但可能会增加插入、更新和删除操作的开销。
唯一索引(Unique Index):与普通索引类似,但在索引列上要求唯一性,与主键索引不一样的是,主键索引的唯一性是针对主键列的,而唯一索引是针对普通索引。唯一索引可以确保索引列的值是唯一的,可以用于查找特定的匹配行,也用于加速对非聚簇索引列的查询。
联合索引(Composite Index)(也加多列索引或复合索引):联合索引是基于多个列创建的索引,允许在多个列上进行查询优化(在树查询先后是按照索引中列的顺序来,例如:c2,c3。那么先按照c2去找符合的,找到了就在找符合C3,以此确定数据。如果你的查询条件只有C3,那么这个索引就会失效,就是联合索引的最左匹配原则,在使用联合索引进行查询时,查询条件必须从联合索引的最左边的列开始,并且按照索引的顺序逐个连续的列进行匹配。只有当查询条件涵盖了联合索引的最左边的一组列时,数据库才能充分利用联合索引来优化查询,否则联合索引可能无法发挥作用,导致无法使用索引或进行回表操作。)。联合索引的创建可以提高联合索引列上的查询效率,尤其在多个列同时进行过滤条件时,避免多次全表扫描。
全文索引(Full-Text Index):全文索引用于对文本内容进行全文搜索,例如在文本字段中搜索关键词。它不同于普通索引,可以实现自然语言的全文检索,支持模糊匹配和相关性排序。
空间索引(Spatial Index):空间索引用于优化对空间数据(如地理坐标点、区域)的查询,例如查找在某个区域内的数据行。
哈希索引(Hash Index):哈希索引将索引列的值通过哈希函数映射为哈希码,然后使用哈希码进行索引。哈希索引适用于等值查询,但不支持范围查询。
需要注意的是,不同数据库管理系统对二级索引的支持和实现方式可能会有所不同,因此具体的索引类型和功能可能会因数据库而异。在设计数据库时,应根据实际需求选择适当的二级索引类型,以优化查询性能和满足业务需求。
mysql的二级索引