为什么用索引,如何创建索引,哪些字段适合创建索引?

🌀 1. 为什么要用索引?

索引 (Index) 是数据库中用于提高 查询性能 的一种数据结构,类似于书本的目录,可以快速定位数据的位置。 作用:

加速查询: 快速找到所需数据,减少全表扫描。加速排序: 索引字段上的 ORDER BY 可以直接利用索引顺序。加速分组: GROUP BY 在索引字段上更高效。加速 JOIN: 基于索引的连接速度更快。

缺点:

占用存储空间: 索引需要额外的磁盘空间。影响写性能: INSERT、UPDATE、DELETE 需要维护索引,会稍微影响性能。

🌀 2. 如何创建索引?

🔹 (1) 创建单列索引 (Single Column Index)

语法:

-- 创建单列索引

CREATE INDEX idx_column_name ON table_name(column_name);

示例:

-- 在 users 表的 email 列上创建索引

CREATE INDEX idx_email ON users(email);

🔹 (2) 创建唯一索引 (Unique Index)

作用:

限制列的值不能重复。同时加速查询。

语法:

-- 创建唯一索引

CREATE UNIQUE INDEX idx_unique_email ON users(email);

🔹 (3) 创建多列索引 (Composite Index)

作用:

用于多个列组合查询时的性能优化。遵循最左前缀匹配原则 (Leftmost Prefix Matching)。

语法:

-- 创建组合索引

CREATE INDEX idx_name_age ON users(name, age);

解释:

支持 WHERE name = '张三' 或 WHERE name = '张三' AND age = 25 的查询。不支持 WHERE age = 25 的直接使用。

🔹 (4) 创建主键索引 (Primary Key Index)

作用:

主键默认创建唯一索引,用于快速定位记录。

语法:

-- 创建主键索引

ALTER TABLE users ADD PRIMARY KEY (id);

🔹 (5) 创建全文索引 (Full-Text Index)

适用场景: 适合对大段文本进行关键词搜索。

语法:

-- 创建全文索引 (仅部分数据库支持,如 MySQL)

CREATE FULLTEXT INDEX idx_content ON articles(content);

🌀 3. 哪些字段适合创建索引?

✅ (1) 作为 WHERE 条件的字段

频繁出现在查询条件 (WHERE) 中的字段,例如用户的 email 或 username。示例: SELECT * FROM users WHERE email = 'test@example.com';

✅ (2) 作为 JOIN 条件的字段

用于表之间连接 (JOIN) 的字段,通常是外键 (Foreign Key)。示例: SELECT * FROM orders o JOIN customers c ON o.customer_id = c.id;

✅ (3) 需要排序 (ORDER BY) 或分组 (GROUP BY) 的字段

这些字段上的索引可以加速排序和分组操作。示例: SELECT * FROM users ORDER BY create_time DESC;

✅ (4) 选择性高的字段 (High Cardinality)

选择性 (Cardinality):指字段中 不同值的数量与总行数的比例。

高选择性字段: 如身份证号、手机号码。低选择性字段: 如性别 (只有男女)。 适合索引的原因: 高选择性字段的索引可以大幅减少扫描的行数。

❌ 哪些字段不适合创建索引?

低选择性字段: 如性别 (M/F) 或是否删除 (0/1) 等二元字段。频繁更新的字段: 如用户余额、积分等经常变化的字段。过长的文本字段: 如大文本类型 (TEXT, BLOB),索引维护成本高。小表字段: 数据行数很少的表,使用索引收益不明显。

🌀 4. 最左前缀原则 (Leftmost Prefix Matching) 详解

原则解释:

组合索引 (如 idx_name_age 在 name 和 age 上) 支持从最左侧开始的匹配规则。

示例:

-- 创建组合索引

CREATE INDEX idx_name_age ON users(name, age);

支持的查询:

✅ WHERE name = '张三'✅ WHERE name = '张三' AND age = 25❌ WHERE age = 25 (无法利用该索引)

🌀 5. 如何查看索引?

语法:

-- 查看某个表的索引

SHOW INDEX FROM users;

🌀 6. 总结:为什么用索引?

加速查询与排序提升 JOIN 与分组效率代价:占用空间 & 降低写性能选择性高且常用于条件的字段适合建索引

如果你有其他问题,随时问我! 😊

何其不幸是 什麼意思
beats全国官方门店(beats官方授权店有哪些)