分库分表问题
常见分库分表问题列表:
分库分表是否支持多个拆分字段
数据访问代理分库分表功能支持多个拆分字段,但是如果配置了拆分字段,后续执行 SQL 均需要加上拆分字段的查询条件。所以建议尽量使用单个拆分字段,减少 SQL 使用场景限制。
例如,如果根据 ID 字段进行拆分,后续执行 SQL 都需要带上 WHERE ID=?
过滤条件,否则会出现 Table rule execute error
错误。
分库分表是否支持跨库 JOIN
数据访问代理暂不支持分库分表场景下的跨库 JOIN 功能,仅支持同一个分片下的 JOIN SQL。假设有一条 JOIN SQL SELECT * FROM user as u INNER JOIN join_table as j ON u.id = j.user_id
,那么针对以下两种情况,处理方式有所不同。
如果 JOIN 表存在分库分表规则,JOIN 时 JOIN 表的后缀和 FROM 表保持一致:
SELECT * FROM user_00 as u INNER JOIN join_table_00 as j ON u.id = j.user_id
。如果 JOIN 表无分库分表规则,JOIN 时 JOIN 表保持原样,不做表名替换:
SELECT * FROM user_00 as u INNER JOIN join_table as j ON u.id = j.user_id
。
分库分表对拆分库表的数量是否有限制
数据访问代理不限制拆分库表的数量,但分库分表的整体数量受后端数据节点的规格限制,请根据业务场景合理设计分库分表的拆分数量。