1、库内分表就是对逻辑表在同一个数据库实例内进行分表以解决单表数据量过大、分片数量过多和跨分片事务的问题。
2、库内分表涉及的SQL改写:将应用原始SQL中逻辑表名以及一些聚合、union写法改写为适合库内分表处理的写法。
3、多表关联SQL改写要求将一条多表关联的SQL改写为不同分片上不同分表间独立的子SQL,并使单个分片上多个子SQL顺序执行。
4、子查询SQL改写使用union的方式组合子查询中的SQL;union SQL改写解析出union Sql中的每条子sql,分别进行改写后最后进行合并。
5、库内分桶可以看成是库内分表的升级版,但在殂翼瑟擀实现方式上完全不同,库内分表通过SQL改写的方式实现,对子查询和多表关联查询支持有限,库内分桶通过虚拟分片的方式实现,分片表支持的特性库内分桶也都支持。
6、库内分桶根据分片算法计算出数据所在的虚拟分片节点(dn),再根据虚拟节点获取到对应的子表,修改SQL语句中的表名(用子表名替换),发送到实际dn上执行。
7、库内分桶的约束:分片键值的数量必须大于虚录搠糅类拟分片的数量,且散列后均匀分布;关联表中如果存在多个库内分桶的表,分桶数必须保持一致,否则不支持多个分桶表之间的关联查询。