笔者最近接触到一个需求,其中需要访问一个其他系统的接口,我们称为A系统,A系统里的表基本上都是分表,A系统对外暴露一个多非分表键查询的接口,接下来我们来说说非分表键查询的一些方法。
以订单表为例,分了10张子表,分表键是客户号,此时需要通过订单号查询:
方法1:建立一张关联表
建立一张新表,每次落库订单的时候,同时落库一张订单关联表,关联表中有客户号、订单号等,这样可以先通过订单号在关联表中查到客户号,进而确定哪张表,然后再做查询,缺点是需要多一次查询。
方法2:非分表键包含分表键
这种方式,需要在订单号的生成中包含客户号,这样如果通过订单号查询就可以直接解析出客户号,不需要额外的查询,效率很高。
方法3:union方式
如果要查询的非分表键,既没有关联表,也不能通过分表键解析出来,这时候需要在程序里,遍历10张表,取出每张表符合条件的数据,然后合并,这种方式实现比较简单,但是很低效。