SQL IN 逗号分隔参数与内部查询
Posted
技术标签:
【中文标题】SQL IN 逗号分隔参数与内部查询【英文标题】:SQL IN comma separated parameters vs inner query 【发布时间】:2012-07-24 06:26:14 【问题描述】:我知道 SQL IN 子句中有 1000 个项目的限制。
目前,我在选择查询的“IN
”子句中使用逗号分隔的项目字符串,我想更改它。
所以,我找到了this,它声明使用JOIN
或在IN
本身内部传递查询。
应该首选哪一个?
编辑(另一个问题):
在“IN
”子句中传递查询和在“IN
”子句中传递逗号分隔参数有什么区别?
【问题讨论】:
数据库优化器将以相同的方式执行这两个变体。您可以使用看起来更好的那个。 :) 您实际上是否在in
子句中使用包含 1,000 个逗号分隔项的查询? 0_0 Srsly,将它们放在一个表中并适当地加入。
@JackManey:不是现在,但将来有机会。
@HardikMishra - 在这种情况下,将它们放在一个表中并适当地加入(或使用in
语句,例如column in (select column from table_with_tons_of_values_oh_god_dont_want_to_list_them_all)
)。
@Andomar:请粘贴您的评论作为答案。我发现它很有帮助
【参考方案1】:
数据库优化器将以相同的方式执行这两种变体。您可以使用看起来更好的那个。 :)
【讨论】:
【参考方案2】:当您将查询放在“In 子句”中时,数据库需要首先计算此查询,然后根据结果计算“主查询”。 如果您将值放在“In 子句”中,则数据库需要计算附加查询。
考虑到在 in 子句中加入查询,数据库会将它们优化为相同。
【讨论】:
所以,你的意思是把值放在比查询好? 从明确的性能角度来看,放置值更快,因为它不需要执行额外的查询,但性能并不是唯一的观点。如果差异是 1 毫秒,而 1 毫秒对您来说可以忽略不计,那么请采取清除方法。 当你的值较少但值超过 1k 时是这样,那么 SQL 本身对 IN 子句有限制。所以,这不是我想要的解决方案。以上是关于SQL IN 逗号分隔参数与内部查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2008 中使用设计器将逗号分隔列表作为参数传递给 db2 查询的 IN 子句