想到 3 种查询方案,假如有 A、B 两个表,会查出 100 条数据
1、A、B 表级联查询
2、先查询 A 表,得到一个集合,然后遍历这个集合,用单条数据中的某个属性去查询 B 表,再把查询出来的结果插到这单条数据里
3、先查询 A 表,得到一个集合 X,然后遍历这个集合 X,取出每个单条数据里的某个属性组成 in(),去查询 B 表得到集合 Y,然后把集合 Y 的数据对应插入到集合 X 里
第 1 种只查询 1 条 sql,第 2 种要查询 101 条 sql,第 3 种查询 2 条 sql,大家用哪种方案?
如果是更大的数据量呢
1
glacer 2018-06-11 10:48:29 +08:00 1
让数据库做行遍历少的 join 是可以的,尤其是能做到小表驱动时。剩余的情况更倾向于单表多次查询。
像 GraphQL 这类查询语言,其原生版本就不支持多表的 join 查询。即使 join-monster 这样的中间件,其底层实现 join 的技术也有两种。其官方文档里也明确在一对一级联(或少量数据级联)的情况下可使用 join 查询,而在多对多级联则建议使用单表 batch 查询。 如果你们的数据库在后期会做水平分库的话,不管是使用 proxy 还是数据库中间件,对 join 查询的支持都不好(分布式数据库对 join 查询是很不友好的)。所以如果前期尽量避免 join 的使用的话会省很多事情。 另外,单表多次查询可以对查询的中间结果缓存,这对 join 来说是很难做到的。 |