面试题答案
一键面试定义差异
- 普通索引:允许在索引列中出现重复值,它主要用于加速数据查询,不限制数据的唯一性。定义语法示例:
CREATE INDEX idx_column_name ON table_name(column_name);
- 唯一索引:要求索引列中的值必须唯一,不允许出现重复值(但允许有一个
NULL
值)。定义语法示例:CREATE UNIQUE INDEX idx_column_name ON table_name(column_name);
数据约束差异
- 普通索引:对数据没有唯一性约束,即同一列可以存储多个相同的值。例如,在员工表中,员工的部门列建立普通索引后,不同员工可以属于同一个部门。
- 唯一索引:强制数据的唯一性,如在用户表的
email
列建立唯一索引,每个用户的email
必须是唯一的,不能重复。
查询性能差异
- 普通索引:在查询时,数据库会扫描索引找到满足条件的所有记录。当查询结果有多条符合条件的数据时,普通索引可以快速定位到这些数据,适合范围查询(如
BETWEEN
、>
、<
等)。例如,查询成绩在 80 到 90 分之间的学生,使用普通索引可以快速定位到符合范围的记录。 - 唯一索引:由于值的唯一性,在查询时一旦找到符合条件的记录,就可以停止搜索,查询效率通常更高,尤其适合精确匹配查询(如
=
)。例如,根据身份证号查询用户信息,身份证号是唯一的,使用唯一索引可以迅速定位到该用户。
适用场景
- 普通索引适用场景:
- 当列中有重复值且需要对这些列进行频繁查询,如查询某个城市的所有用户,城市列可能有多个相同值,此时使用普通索引。
- 范围查询频繁的场景,如查询某个时间段内的订单记录。
- 唯一索引适用场景:
- 当列中的数据必须唯一,如用户的用户名、手机号码等,确保数据的完整性和准确性。
- 精确匹配查询频繁的场景,如根据学号查询学生详细信息。