标准答案
- 全局 ORDER BY 需要各分片返回候选集合后再归并,深分页往往要求每个分片都扫描和返回更多数据。
- COUNT、SUM、DISTINCT 和 GROUP BY 需要跨节点汇总,网络传输、重复去重和慢分片都会影响整体尾延迟。
- 最有效的方式是让常用查询带分片键,只访问一个分片;无法路由的查询应限制频率和范围。
- 可以使用搜索索引、分析仓库、汇总表、异步报表或按时间和租户拆分的产品交互来承接全局查询。
- 游标分页、近似统计和延迟更新是可接受时常用折中,但要明确结果不再是强实时全局视图。
题目解析
单库中 ORDER BY created_at LIMIT 20 很自然,分片后若没有同一个路由键,就需要每个分片都给出最靠前的一批记录,再由协调层做 k 路归并。分片越多,任何一个慢节点都会拖慢用户响应。
很多跨分片需求本质是产品需求。例如运营要“全平台所有订单随便翻到第 N 页”,这类能力需要专门索引与权限模型,不能指望交易库在分片后仍以相同成本支持。
常见误区
- 在应用层并发查所有分片后直接拼接结果,排序、去重和分页全部错误。
- 对实时交易库执行无边界的全局报表,把高峰资源耗在低优先级查询上。