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号
浙公网安备 33010602011771号