mysql中的普通索引和唯一索引

普通索引 (INDEX 或 KEY)

基本特性:

使用 INDEX 或 KEY 关键字创建

允许索引列包含重复值

主要用于提高查询性能

创建语法:
CREATE INDEX index_name ON table_name(column_name);
-- 或
ALTER TABLE table_name ADD INDEX index_name(column_name);
使用场景:

需要加速查询但不需要强制唯一性的列

经常用于 WHERE 子句、JOIN 条件或 ORDER BY 的列

唯一索引 (UNIQUE INDEX)

基本特性:

使用 UNIQUE INDEX 或 UNIQUE KEY 关键字创建

强制索引列的值必须唯一(允许 NULL 值,除非列定义为 NOT NULL)

既提高查询性能,又保证数据唯一性

创建语法:
CREATE UNIQUE INDEX index_name ON table_name(column_name);
-- 或
ALTER TABLE table_name ADD UNIQUE INDEX index_name(column_name);
使用场景:

需要保证数据唯一性的列(如身份证号、用户名等)

主键自动创建唯一索引

主要区别

特性 普通索引 唯一索引
允许重复值 是 否
NULL 值处理 允许多个 NULL 允许多个 NULL(除非列是 NOT NULL)
性能影响 插入/更新稍快 插入/更新需要检查唯一性,稍慢
数据完整性 不保证 保证唯一性
主键自动创建 否 是(主键是一种特殊的唯一索引)
选择建议
如果需要强制唯一性约束,选择唯一索引

如果只是提高查询性能且允许重复值,选择普通索引

注意:唯一索引可以作为外键引用,普通索引不能(在某些数据库系统中)

实际示例

-- 创建表时定义索引
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,  -- 隐式创建唯一索引
    email VARCHAR(100),
    INDEX idx_email (email)       -- 普通索引
);

-- 已有表添加索引
ALTER TABLE users ADD INDEX idx_username (username);  -- 普通索引
ALTER TABLE users ADD UNIQUE INDEX uniq_email (email); -- 唯一索引

唯一索引在业务上常用于防止数据重复,而普通索引则专注于优化查询性能。

posted @ 2025-07-09 17:32  kopok  阅读(104)  评论(0)    收藏  举报