首页 > 解决方案 > Active Record 高效查询多个不同的表

问题描述

让我总结一下我一直在尝试做的事情以及我遇到的效率问题:

本质上,我希望我的用户能够选择参数来过滤我的数据库中的数据,然后我想传递从控制器传递这些过滤器的相关数据。

但是,这些过滤器查询来自多个不同表(即大约 5-6 个不同的表)的数据,其中一些非常大(如 100k+ 行)。这些表格都与我要展示的内容有关,例如,这是一个符合某某标准的债券,它是由某某发行人发行的,它必须符合这些标准,等等。

从最终结果来看,根据用户提供的参数进行查询后,我确实只需要大约 100 行,但感觉就像我需要查看每个表中的所有内容,因为我事先不知道过滤器的严格程度。例如,对于 100k 组数据的起始全域,通过表 1 的过滤器 f1,f2 可能会留下 90k,但在通过表 2 的过滤器 f3、表 3 的 f4,f5,f6 等之后...,我们可能最终得到 100 组或更少的通过这些参数的数据集,因为最后检查的过滤器可能非常严格。

如何有效地查询这些多个不同的表?

在它们之间进行连接似乎会产生一些时间复杂度 |T_1||T_2||T_3||T_4||T_5||T_6| 其中 T_i 是表 i 的“大小”。

另一方面,只需根据通过前一个过滤器的 id 来查看其他表(例如,id 5,7,8 在 T_1 中通过过滤器,然后这些 id 中的哪些通过 T_2 中的过滤器,然后哪个T_3 中的那些通过过滤器等等)看起来可能(?)具有 |T_1| 的时间复杂度 + |T_2| + ... + |T_6|。

我对 Ruby on Rails 比较陌生,所以我不完全确定我可以使用的所有工具都可以帮助优化这一点,但同时我也不完全确定如何最好地在算法上解决这个问题。

标签: postgresqlalgorithmperformanceactiverecord

解决方案


推荐阅读