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时,如果列可
- 提供一种批量选择机制(
)。在这种情况下,批量大小为5select*from user,其中user_id位于(?,,,?,?)
- 使用绑定变量并保持大小一致的批
- 使用null
- 使用第一个用户id
另外,当使用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。