输入IN子句时的替代选择很多值(postgreSQL)

时间:2015-05-05 11:58:55

标签: postgresql optimization

我正在使用IN子句来检索包含某些标记的地方。为此我只需使用

select .. FROM table WHERE tags IN (...)

现在我在IN子句中提供的标签数量大约是500个,但很快(在不久的将来)数字标签很可能会跳到5000以上(甚至更多)

我猜测查询的大小和IN子句中的数字值都有某种限制(好奇心的奖励问题是什么值?)

所以我的问题是什么是一个很好的替代查询,即使在将来我会匹配让我们说10'000个标签,这将是未来的证据?

ps:我环顾四周,看到有人提到“临时桌”。我从来没用过那些。他们将如何在我的案件中使用?我每次进行查询时都需要创建一个临时表吗?

谢谢, 弗朗西斯

2 个答案:

答案 0 :(得分:3)

一种选择是将其加入values子句

with parms (tag) as (
  values ('tag1'), ('tag2'), ('tag3')
)
select t.*
from the_table t
  join params p on p.tag = t.tag;

答案 1 :(得分:1)

您可以使用以下方式创建表格:

tablename

id  |   tags
----+----------
1   | tag1
2   | tag2
3   | tag3

然后做:

select .. FROM table WHERE tags IN (SELECT * FROM tablename)