PolarDB-X 最佳实践:如何设计一张订单表

本文介绍了如何在PolarDB-X中使用全局索引和CO_HASH分区算法解决淘宝订单系统中的多维度查询问题,包括买卖家查询优化和订单详情查找,强调了clustered索引和CO_HASH在减少GSI数量和提升查询效率中的作用。
摘要由CSDN通过智能技术生成

本文主要内容是如何使用全局索引与CO_HASH分区算法(CO_HASH),实现高效的多维度查询。

1. 淘宝订单号中的秘密

有一个很有趣的事情。

打开你的淘宝客户端或者PC端的淘宝,点开订单列表,打开几个订单,查看他们的订单号,你会发现什么?

比如这是我最近的3个订单,和10年前的3个订单。其订单号分别是:

1249511065364414810
1238822988656414810
1236446127134414810
103698817404810
107655289504810
103719620094810

也许你会惊奇的发现,订单号的后几位好像是一样的。比如我的账号,从10年前到今天,订单号的后四位一直是4810,那么为什么?这个其实和使用分布式数据库的一个最佳实践相关。

2. 经典的买卖家例子

好多年前就流传着淘宝买卖家的案例...

淘宝中有一个非常重要的表,订单表,他里面存着订单的一些关键信息,例如订单号(order_id)、卖家id(seller_id)、买家id(buyer_id)、商品id等等。有两类查询是这个表上的高频查询:

select * from orders where buyer_id = ?
select * from orders where seller_id = ?

这两个SQL的业务含义一目了然,分别是买家查询自己的订单列表和卖家查询自己的订单列表。

如果我们在单机数据库中做这两条SQL,都知道怎么做。嗯,在buyer_id和seller_id上分别建个建索引就可以了:

create index idx_buyer_id on orders (buyer_id);
create index idx_seller_id on orders (seller_id);

在数据库中,空间换时间是一个非常基本的思路,例如加索引。

如果你是用一些分库分表中间件,例如MyCAT之类的产品,对这个表做了分库分表,就需要面临一个跟单机数据库完全不一样的一个问题,该如何选择分库分表键?

一般此类中间件都会告诉你,你哪个列查的最多,就选哪个列做拆分键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值