我正在尝试通过名为id的列的值来选择多个行。我知道您可以通过以下方法轻松地完成此操作:
SELECT col1, col2, col3 FROM mytable WHERE id IN (1,2,3,4,5...)
然而,如果有几百万个ID我想选择,而这些ID并不总是有模式(这意味着我不能使用像x和y之间的东西)?这个select语句仍然有效吗?或者有更好的方法吗?
实际应用是这样的。过滤器由用户指定,与记录的某些属性进行比较。从这些过滤器中,我们创建一个特定用户感兴趣的数据子集。大约有3000万条记录,每个记录有大约3000个属性(存储在大约30个表中,但每个表都有id作为主键),因此每当有人查询他们想要的记录子集时,我们就必须连接许多表,应用这些过滤器,并找出他的子集是什么样子。为了避免一直连接许多表,我想最好只连接一次表,找出所选子集的id,这样每次进行新查询时,我们所要做的就是选择与筛选id匹配的行的相关列。
1条答案
按热度按时间jgwigjjp1#
这取决于您使用的数据库和接口。对于几百或几千个值,没问题。但你的问题是数百万。这可能会开始限制查询的长度——由数据库、您使用的工具或中间库指定。
如果您有这么多的id,我强烈建议您将它们加载到数据库的表中
id
作为主键。然后使用join
或者exists
标识表中匹配的行。通常,这样的列表无论如何都会在数据库中生成。在这种情况下,您可以使用子查询或cte,只需在最终查询中包含该代码。