索引是数据库中用于加速数据检索的重要机制。使用 `CREATE INDEX` 语句可以为表的一个或多个列创建索引

📅 2026/7/13 21:35:56
索引是数据库中用于加速数据检索的重要机制。使用 `CREATE INDEX` 语句可以为表的一个或多个列创建索引
索引是数据库中用于加速数据检索的重要机制。使用CREATE INDEX语句可以为表的一个或多个列创建索引如 B-Tree、哈希、全文索引等从而显著提升SELECT、JOIN、WHERE、ORDER BY等查询操作的执行效率。但索引并非免费✅ 优点大幅减少磁盘 I/O 和扫描行数加快查找速度❌ 缺点增加INSERT、UPDATE、DELETE的开销需同步更新索引结构占用额外存储空间过多索引还可能干扰优化器选择最优执行计划。示例MySQL/PostgreSQL-- 单列索引CREATEINDEXidx_user_emailONusers(email);-- 复合索引注意最左前缀原则CREATEINDEXidx_user_status_createdONusers(status,created_at);-- 唯一索引CREATEUNIQUEINDEXidx_user_phoneONusers(phone);复合索引如INDEX (a, b, c)在底层通常基于 B-Tree 结构组织其键值按定义顺序拼接存储即先按a排序a相同时按b排序b也相同时再按c排序。最左前缀原则正是源于这种有序存储结构✅只有查询条件中包含索引最左侧连续列时索引才能被有效利用。例如对(a, b, c)索引✅WHERE a 1→ 可用匹配前缀a✅WHERE a 1 AND b 2→ 可用匹配前缀a,b✅WHERE a 1 AND b 2 AND c 3→ 可用完整前缀 范围⚠️WHERE b 2或WHERE c 3→ ❌不可用跳过最左列aB-Tree 无法定位起始范围⚠️WHERE a 1 AND c 3→ 仅能使用ac因b缺失而失效无法跳过中间列对查询性能的影响✅ 正确利用最左前缀 → 索引快速定位数据页避免全表扫描响应时间从秒级降至毫秒级❌ 违反该原则 → 索引失效退化为全表扫描或文件排序性能急剧下降 衍生优化将高选择性区分度大、常用于等值查询的列放在复合索引左侧范围查询列如,BETWEEN靠右以最大化前缀匹配能力。