MySQL 关联查询速查笔记
📌 核心关联类型
类型 | 语法 | 特点 | 应用场景 |
---|---|---|---|
INNER JOIN | A JOIN B ON... | 只返回两表匹配的行 | 需要严格匹配数据的查询 |
LEFT JOIN | A LEFT JOIN B... | 保留左表全部数据,右表无匹配则为NULL | 统计时保留主表完整数据 |
RIGHT JOIN | A RIGHT JOIN B... | 保留右表全部数据,左表无匹配则为NULL | 较少使用(通常用LEFT JOIN替代) |
FULL JOIN | UNION实现 | 保留两表全部数据 | 需要合并两表所有记录的特殊场景 |
🔍 常用查询模板
-- 基础关联查询
SELECT a.*, b.*
FROM 主表 a
JOIN 关联表 b ON a.id = b.foreign_key;
-- 带聚合的关联统计
SELECT
a.id,
a.name,
COUNT(b.id) AS item_count
FROM 主表 a
LEFT JOIN 子表 b ON a.id = b.parent_id
GROUP BY a.id;
-- 多表级联关联
SELECT a.name, b.value, c.status
FROM 表A a
JOIN 表B b ON a.id = b.a_id
JOIN 表C c ON b.id = c.b_id;
⚡ 性能优化要点
-
必加索引:关联字段必须建立索引
ALTER TABLE 子表 ADD INDEX idx_foreign_key (foreign_key);
-
查询精简原则:
- 避免
SELECT *
,只查必要字段 - 大表关联时,先过滤再JOIN
- 避免
-
执行顺序:小表驱动大表(FROM后先写小表)
🔄 方案选型对比
方案 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
关联查询 | 数据实时准确,无冗余存储 | 复杂查询可能较慢 | 数据量小,变动频繁的场景 |
同步字段 | 查询性能极佳 | 需维护数据一致性 | 数据量大,统计查询频繁的场景 |