在数据库系统中,二级索引(Secondary Index)是用来加速查询的辅助索引,通常与主键(或聚簇索引)配合使用。
主要概念:
-
主键索引(Primary Index):主键索引通常基于表中的主键字段,并且索引的数据按照主键的顺序存储。在 InnoDB 中,主键索引称为聚簇索引(Clustered Index),数据行存储在索引的叶子节点中。
-
二级索引(Secondary Index):二级索引是针对非主键列(或非唯一键列)创建的索引。它为那些在主键列以外的列上的查询提供快速访问。例如,如果经常在姓名或邮箱字段上进行查询,则可以在这些列上创建二级索引。
特点与作用:
-
提高查询性能:二级索引通过提供对表中特定列的快速查找,减少全表扫描,显著提高查询性能。
-
指向主键:在 InnoDB 引擎中,二级索引存储了对应列的值以及该行数据的主键值。通过二级索引找到匹配的列后,数据库会使用主键去查找完整的数据行。
-
不影响表的物理存储顺序:与主键索引不同,二级索引并不会影响数据在表中的物理存储顺序。它只是额外创建的一个结构,帮助数据库快速找到数据。
例子:
假设我们有一个名为 users
的表:
CREATE TABLE users (
user_id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
age INT
);
- 主键索引是
user_id
列上的。 - 如果我们经常按
email
列进行查询,例如SELECT * FROM users WHERE email = 'example@example.com'
,我们可以创建一个二级索引来加速这一查询:
CREATE INDEX idx_email ON users (email);
通过在 email
列上创建二级索引,查询速度将大幅提升。数据库将不再需要扫描整张表,而是通过二级索引迅速找到相应的行。
总结:
二级索引主要用于提升非主键列上的查询性能。它不改变数据的物理存储顺序,而是为数据表增加一个额外的结构,使数据库可以更高效地处理特定列的查询。