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); -- 唯一索引
唯一索引在业务上常用于防止数据重复,而普通索引则专注于优化查询性能。
浙公网安备 33010602011771号