Sql 对于datetype位,|比或快吗?

Sql 对于datetype位,|比或快吗?,sql,tsql,Sql,Tsql,假设X&Y是日期类型位 其中某物=1和(X=1或Y=1) 其中某物=1且X | Y=1 使用|的第二个是否比或更高的速度更快?若然,原因为何 我的同事说他们是。我有点笨,也很懒,在我试图理解为什么之前,我正在努力确认这是真的 我们使用T-SQL,尽管我想不管答案是什么,它可能对大多数(所有?)SQL都是通用的?这太长了,无法发表评论 在大多数编程语言中,位篡改是一种节省存储和提高性能的方法。虽然将项存储为位可以节省关系数据库中的存储,但这并不是提高性能的途径 基本上,位运算符——与大多数其他函数

假设X&Y是日期类型位

其中某物=1和(X=1或Y=1)

其中某物=1且X | Y=1

使用|的第二个是否比或更高的速度更快?若然,原因为何

我的同事说他们是。我有点笨,也很懒,在我试图理解为什么之前,我正在努力确认这是真的


我们使用T-SQL,尽管我想不管答案是什么,它可能对大多数(所有?)SQL都是通用的?

这太长了,无法发表评论

在大多数编程语言中,位篡改是一种节省存储和提高性能的方法。虽然将项存储为位可以节省关系数据库中的存储,但这并不是提高性能的途径

基本上,位运算符——与大多数其他函数和运算符一样——会妨碍优化器,并阻止使用索引和分区修剪。它们通常也会产生一些开销,这仅仅是因为CPU被设计为一次处理一组位(比如4字节或8字节),而不是单个位

还有一个问题是,什么样的性能可以被保存。如果查询正在进行全表扫描,则主要成本是读取数据。不过滤数据。在将数据页读入内存所需的时间内,可以对位或整数进行大量、大量、大量的比较——每行超过3次


因此,即使绩效存在差异,也很难衡量。我鼓励你试试。我认为这两个版本本质上是等价的,每个版本都有三位运算和一些布尔运算。

至于什么更快:这可以通过检查执行计划和/或实际计时使用这些运算符的查询来回答(提示:大多数时间不会被这些操作占用,而是取决于查询需要的I/O以及是否可以使用索引):不,不。除了数据库引擎不使用相同的SQL方言外,它们当然也不使用相同的实现。在一个引擎上获得的结果不会转换为另一个引擎,除了非常一般的观察结果,如“索引帮助”。如果其中一个为空,则它们就不一样。即使在语义相同的情况下,
和X | Y=1
比不太模糊的
版本更不可能产生准确的基数估计,这在某些情况下可能会导致更糟糕的执行计划。请选择可读性
中的某物=1和1(X,Y)
建议阅读:和。