【问题标题】:SQL IN comma separated parameters vs inner querySQL IN 逗号分隔参数与内部查询
【发布时间】: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:请粘贴您的评论作为答案。我发现它很有帮助

标签: sql performance


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您将查询放在“In 子句”中时,数据库需要首先计算此查询,然后根据结果计算“主查询”。 如果您将值放在“In 子句”中,则数据库需要计算附加查询。

    考虑到在 in 子句中加入查询,数据库会将它们优化为相同。

    【讨论】:

    • 所以,你的意思是把值放在比查询好?
    • 从明确的性能角度来看,放置值更快,因为它不需要执行额外的查询,但性能并不是唯一的观点。如果差异是 1 毫秒,而 1 毫秒对您来说可以忽略不计,那么请采取清除方法。
    • 当你的值较少但值超过 1k 时是这样,那么 SQL 本身对 IN 子句有限制。所以,这不是我想要的解决方案。
    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2010-10-05
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多