面试题答案
一键面试定义区别
- 普通索引:在表的一列或多列上创建的索引,允许索引列包含重复值。创建语法示例:
CREATE INDEX index_name ON table_name(column_name);
- 唯一索引:同样在表的一列或多列上创建索引,但索引列的值必须唯一,不过允许有一个 NULL 值(如果列允许 NULL)。创建语法示例:
CREATE UNIQUE INDEX unique_index_name ON table_name(column_name);
作用区别
- 普通索引:主要作用是加快数据的检索速度,通过建立索引,数据库在查询时可以快速定位到相关数据,减少全表扫描的概率。
- 唯一索引:除了具备普通索引加快检索速度的作用外,还能保证索引列数据的唯一性,防止表中出现重复值,可作为一种数据完整性约束。
使用场景区别
- 普通索引:
- 适用于频繁进行查询操作的列,例如在电商系统中,根据商品分类查询商品列表,可在商品分类列上创建普通索引。
- 对于经常用于连接操作的列,如多表关联查询时涉及的外键列,创建普通索引可以提升连接效率。
- 唯一索引:
- 用于确保数据唯一性的场景,如用户表中的用户名列,每个用户的用户名必须唯一,适合创建唯一索引。
- 某些业务场景下,需要保证特定组合列的唯一性,可在这些组合列上创建唯一索引。
对数据插入性能影响区别
- 普通索引:插入数据时,数据库只需在索引结构中找到合适位置插入新的索引项,相对简单。如果插入的数据与已有数据在索引列上有重复,仍可正常插入,不会额外触发唯一性检查,所以插入性能相对较高。
- 唯一索引:插入数据时,数据库不仅要在索引结构中插入新索引项,还要检查插入的值在索引列上是否唯一。若存在重复值,插入操作会失败并报错。这种唯一性检查增加了额外的开销,尤其在高并发插入场景下,需要获取锁来保证唯一性检查的原子性,可能导致锁竞争,从而降低插入性能。