分布式数据库中 LEFT JOIN 的应用要点
一 语义与执行特性
二 执行策略与数据分发
三 常见 SQL 写法与路由选择
| 场景 | 推荐写法要点 | 路由与执行建议 |
|---|---|---|
| 路由可下推到单分片 | 在 WHERE 中使用分片键等值过滤(如 a.id=2),再 LEFT JOIN | 将整条 SQL 下推到目标分片执行,避免中间件层 JOIN 与数据合并 |
| 左表分片键在 ON 中 | SELECT … FROM a LEFT JOIN b ON a.id = b.id AND a.id = 2 | 不能据此下推整条 SQL;应按分片键先过滤左表(WHERE a.id=2),再 JOIN |
| 全局表 LEFT JOIN 拆分表 | 使用全局表副本参与 JOIN,避免 UNION ALL 累加 | 中间件仅取一个全局副本与各分片结果合并,保证正确性与性能 |
四 性能与稳定性优化清单
五 实战示例
-- 部门为 'tech' 的用户,及其最近 30 天订单总数与总金额
SELECT
u.id,
u.name,
o.total_count,
o.total_amount
FROM (
SELECT id, name
FROM users
WHERE dept = 'tech' -- 先缩小左表
) u
LEFT JOIN (
SELECT
user_id,
COUNT(*) AS total_count,
SUM(amount) AS total_amount
FROM orders
WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY user_id -- 先聚合右表,避免一对多膨胀
) o
ON o.user_id = u.id;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。