首页 > 解决方案 > 使用 SQL 通过索引选择大量行

问题描述

我正在尝试通过名为 ID 的列的值来选择多行。我知道你可以很容易地做到这一点:

SELECT col1, col2, col3 FROM mytable WHERE id IN (1,2,3,4,5...)

但是,如果我想选择几百万个 ID 并且这些 ID 并不总是有模式(这意味着我不能使用 BETWEEN x AND y 之类的东西)怎么办?这个 select 语句是否仍然有效,或者有更好的方法吗?


实际应用是这样的。过滤器由用户指定,与记录的某些属性进行比较。从这些过滤器中,我们创建了特定用户感兴趣的数据子集。大约有 3000 万条记录,每条记录大约有 3000 个属性(存储在大约 30 个表中,但每个表都有 ID 作为主键),所以每次有人查询他们想要的记录子集时,我们都会有加入许多表,应用这些过滤器,并找出他的子集是什么样的。为了避免一直加入很多表,我认为最好只加入一次表,找出所选子集的 id,这样每次进行新查询时,我们所要做的就是选择与过滤后的 id 匹配的行的相关列。

标签: sqlgoogle-bigquery

解决方案


这取决于您使用的数据库和界面。对于几百或几千个值,没问题。但是您的问题指定了数百万。这可能会开始限制查询的长度——由数据库、您使用的工具或中间库指定。

如果您有这么多 id,我强烈建议您将它们加载到数据库中的一个表中,并id以 为主键。然后使用joinorexists来识别表中匹配的行。

通常,无论如何都会在数据库中生成这样的列表。在这种情况下,您可以使用子查询或 CTE,并在最终查询中包含该代码。


推荐阅读