直接回答:EXPLAIN + SQL 输出优化器选择的执行计划。重点关注:type(访问类型,从好到差大致 const > eq_ref > ref > range > index > ALL,至少应到 range)、key(实际使用的索引,NULL 即全表扫描)、rows(估算扫描行数)、Extra(Using filesort、Using temporary 是危险信号,Using index 表示覆盖索引)。
展开解析:
- possible_keys 与 key 不一致,说明优化器放弃了你以为会用的索引。
- key_len 可推算联合索引命中了几列;filtered 结合 rows 估算最终结果行数。
- select_type 反映查询结构(SIMPLE/SUBQUERY/DERIVED/UNION)。
实践:EXPLAIN 是估算,MySQL 8.0.18+ 的 EXPLAIN ANALYZE 能看到真实耗时与实际行数,更可靠;仍不解时用 optimizer_trace 看决策过程。
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 100;
追问方向:type 各级含义、如何消除 filesort(排序列入索引)。