Sql 批量选择使用大小一致的批

Sql 批量选择使用大小一致的批,sql,performance,select,Sql,Performance,Select,我想要实现的是: 提供一种批量选择机制(select*from user,其中user_id位于(?,,,?,?))。在这种情况下,批量大小为5 使用绑定变量并保持大小一致的批 因此,如果应用程序要求用户使用8个不同的user_id,那么我将调用前面提到的SQL两次,每次调用有5个参数(而不是一次调用有5个user_id,然后调用3个) 因此,如果输入大小小于批处理大小,我需要填充用户ID。我想知道在性能方面什么是好的填充方案: 使用null 使用第一个用户id 使用null时,如果列可

我想要实现的是:

  • 提供一种批量选择机制(
    select*from user,其中user_id位于(?,,,?,?)
    )。在这种情况下,批量大小为5
  • 使用绑定变量并保持大小一致的批
因此,如果应用程序要求用户使用8个不同的user_id,那么我将调用前面提到的SQL两次,每次调用有5个参数(而不是一次调用有5个user_id,然后调用3个)

因此,如果输入大小小于批处理大小,我需要填充用户ID。我想知道在性能方面什么是好的填充方案:

  • 使用null
  • 使用第一个用户id
使用null时,如果列可为null,是否会导致性能下降?
另外,当使用null时,DB是否仍会提出一个查询计划,因为我希望使用大小一致的批处理来实现这一点?

您的两个选项都是等效的*

* Using null?
* Using the first user_id
没有区别*。在In子句中,会删除空值,因此不会降低性能,除非您使用的RDBMS有一个ANSI_空值选项,您可以将其设置为OFF(例如SQL Server)-请参见下文。In子句也是集合,因此拥有(1,2,3,1,1)等同于只拥有(1,2,3),但它确实使绑定更容易

因此,如果您(1)使用允许空值匹配空值的RDBMS,并且(2)计划使用该设置,则2是等效的

另一方面,要100%确定,只需使用第二个选项


SQL Server代码显示空值并选择空值

set ansi_nulls off
select *
from (select 1 a union all select 2 union all select null) x
where a in (1,2, null)

您的两个选项都是等效的*

* Using null?
* Using the first user_id
没有区别*。在In子句中,会删除空值,因此不会降低性能,除非您使用的RDBMS有一个ANSI_空值选项,您可以将其设置为OFF(例如SQL Server)-请参见下文。In子句也是集合,因此拥有(1,2,3,1,1)等同于只拥有(1,2,3),但它确实使绑定更容易

因此,如果您(1)使用允许空值匹配空值的RDBMS,并且(2)计划使用该设置,则2是等效的

另一方面,要100%确定,只需使用第二个选项


SQL Server代码显示空值并选择空值

set ansi_nulls off
select *
from (select 1 a union all select 2 union all select null) x
where a in (1,2, null)

谢谢在甲骨文中对空值也有什么特殊处理吗?@aayush甲骨文以标准方式处理空值,这就是它们是无与伦比的。您只能对它们使用IS NULL或IS NOT NULL。谢谢!在甲骨文中对空值也有什么特殊处理吗?@aayush甲骨文以标准方式处理空值,这就是它们是无与伦比的。您只能对它们使用IS NULL或IS NOT NULL。