

新闻资讯
技术学院SQL索引需用对地方,优先为WHERE、ORDER BY、GROUP BY、JOIN ON字段创建,高区分度字段更优,复合索引遵循最左前缀原则,避免频繁更新字段,建前须用EXPLAIN验证执行计划。
SQL索引不是加得越多越好,关键在“用对地方”。创建前先看查询条件、排序字段和连接列,再结合数据分布和更新频率做判断——选错字段或滥用索引反而拖慢写入、浪费空间。
高频出现在 WHERE、ORDER BY、GROUP BY 和 JOIN ON 后的字段优先考虑。比如用户表常按 status 筛选、按 created_at 排序,这两个字段就值得建索引。
user_id 比 gender 更适合单列索引)(a, b, c) 能加速 a、a,b、a,b,c 的查询,但对 b 或 b,c 无效把过滤性最强的字段放最左边,排序/分组字段放右边。例如查询:SELECT * FROM orders WHERE user_id = ? AND status = 'paid' ORDER BY created_at DESC,推荐索引:INDEX (user_id, status, created_at)。
user_id 本身已建主键或唯一索引,可只建 (status, created_at)
SELECT 中的字段也加进索引末尾(如 (user_id, status, created_at, amount)),避免回表查数据行(status, user_id) 对 WHERE user_id = ? 就没用别急着 CREATE INDEX,先确认它真能起作用。
EXPLAIN(MySQL)或 EXPLAIN QUERY PLAN(SQLite)看执行计划,确认是否走了索引、有没有 Using filesort 或 Using temporary
is_deleted 大多为0)建索引意义不大索引不是万能解药。有些场景更适合其他方式:
FULLTEXT)或倒排表WHERE YEAR(created_at) = 2025 → 改成 WHERE created_at >= '2025-01-01' AND created_at
OR 条件可能走不了索引,试试拆成 UNION 或重写逻辑基本上就这些。索引本质是空间换时间,核心逻辑就一条:让数据库少扫描、少排序、少回表。动手前多看执行计划,上线后留意慢日志,不复杂但容易忽略。