MST

星途 面试题库

面试题:MySQL索引类型之普通索引与唯一索引的区别

在MySQL中,普通索引和唯一索引都被广泛使用,请详细阐述普通索引和唯一索引在定义、作用、使用场景以及对数据插入性能影响上的区别。
18.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

定义区别

  • 普通索引:在表的一列或多列上创建的索引,允许索引列包含重复值。创建语法示例:CREATE INDEX index_name ON table_name(column_name);
  • 唯一索引:同样在表的一列或多列上创建索引,但索引列的值必须唯一,不过允许有一个 NULL 值(如果列允许 NULL)。创建语法示例:CREATE UNIQUE INDEX unique_index_name ON table_name(column_name);

作用区别

  • 普通索引:主要作用是加快数据的检索速度,通过建立索引,数据库在查询时可以快速定位到相关数据,减少全表扫描的概率。
  • 唯一索引:除了具备普通索引加快检索速度的作用外,还能保证索引列数据的唯一性,防止表中出现重复值,可作为一种数据完整性约束。

使用场景区别

  • 普通索引
    • 适用于频繁进行查询操作的列,例如在电商系统中,根据商品分类查询商品列表,可在商品分类列上创建普通索引。
    • 对于经常用于连接操作的列,如多表关联查询时涉及的外键列,创建普通索引可以提升连接效率。
  • 唯一索引
    • 用于确保数据唯一性的场景,如用户表中的用户名列,每个用户的用户名必须唯一,适合创建唯一索引。
    • 某些业务场景下,需要保证特定组合列的唯一性,可在这些组合列上创建唯一索引。

对数据插入性能影响区别

  • 普通索引:插入数据时,数据库只需在索引结构中找到合适位置插入新的索引项,相对简单。如果插入的数据与已有数据在索引列上有重复,仍可正常插入,不会额外触发唯一性检查,所以插入性能相对较高。
  • 唯一索引:插入数据时,数据库不仅要在索引结构中插入新索引项,还要检查插入的值在索引列上是否唯一。若存在重复值,插入操作会失败并报错。这种唯一性检查增加了额外的开销,尤其在高并发插入场景下,需要获取锁来保证唯一性检查的原子性,可能导致锁竞争,从而降低插入性能。