我测试了两个场景单个巨大集合与多个小集合,发现查询时性能存在巨大差异。这就是我所做的。
案例 1:我为 10 种不同类型的产品创建了一个包含 1000 万条记录的产品集合,其中每种产品类型恰好有 100 万条记录,并且我在 ProductType 上创建了索引。当我运行条件 ProductType=1 和 ProductPrice>100 和 limit(10) 的示例查询以返回 10 条 ProductType=1 且价格大于 100 的记录时,当集合中有很多价格的产品时,大约需要 35 毫秒大于 100,当 ProductType=1 中价格大于 100 的产品数量非常少时,相同的查询大约需要 8000 毫秒(8 秒)。
案例 2:我为每个 ProductType 创建了 10 个不同的 Product 表,每个 ProductType 包含 100 万条记录。在包含 productType 1 记录的集合 1 中,当我使用条件 ProductPrice>100 和 limit(10) 运行相同的示例查询以返回 10 条价格大于 100 的产品记录时,当集合有很多时大约需要 2.5 毫秒价格大于 100 的产品,当我们的价格大于 100 的产品数量非常少时,相同的查询大约需要 1500 毫秒(1.5 秒)。
那么为什么会有这么大的区别呢?案例一和案例二之间的唯一区别是一个巨大的集合与多个较小的集合,但我在第一个案例中创建了 ProductType 索引一个单一的巨大集合。我猜性能差异是由第一种情况下的索引引起的,我需要在第一种情况下使用该索引,否则性能会更差。由于索引,我预计第一种情况下的性能会有所下降,但我没想到第一种情况下的巨大差异会慢 10 倍。
因此,一个大型集合与多个小型集合的 8000 毫秒与 1500 毫秒。为什么?