2012-07-24 85 views
0

我知道SQL IN子句中有1000项限制。 目前,我在选择查询的“IN”子句中使用逗号分隔的一串项目,我想对其进行更改。SQL IN逗号分隔参数与内部查询

所以,我发现this,其中规定使用JOININ本身内部传递查询。

哪一个应该是首选?

EDIT(另一个问题):

是什么在“IN”条款经过查询,并通过逗号分隔参数“IN”条款的区别?

+4

数据库优化器将以相同的方式执行这两个变体。你可以使用看起来更好的那个。 :) – Andomar 2012-07-24 06:33:25

+2

你**实际上是**在一个'in'子句中使用包含1,000个以逗号分隔的项目的查询吗? 0_0 Srsly,把他们放在一张桌子上,并适当地加入。 – 2012-07-24 06:52:10

+0

@JackManey:不是现在,但将来有机会。 – 2012-07-24 08:11:10

回答

1

数据库优化器将以相同的方式执行这两个变体。你可以使用看起来更好的那个。 :)

0

当您在“In子句”中输入查询时,数据库需要首先计算此查询,并根据结果calc计算“主查询”。 如果您将值放入“In子句”中,则数据库dost需要计算其他查询。

由于担心在in子句中针对查询进行连接,数据库会将它们优化为相同。

+0

所以,你的意思是说把价值观而不是查询? – 2012-07-24 12:17:52

+0

从清晰的性能角度来看,由于其执行附加查询所需的dosnt值更快,但性能不是唯一的角度。如果差异为1毫秒,1毫秒对您来说可以忽略不计,那么请采取清除方法。 – 2012-07-24 12:36:14

+0

当你有更少的值但是当值大于1k时,它是真的,那么SQL本身对IN子句有限制。所以,这不是我寻找的解决方案。 – 2012-07-24 16:40:09