WHERE字段是否比> 0更快

时间:2014-11-24 17:53:16

标签: sql sql-server null

我有许多我们正在过滤的整数ID字段(SQL Server)。我准备插入新行。是否可以更快地使用WHERE fieldname IS NOT NULL,还是可以使用WHERE fieldId > 0获取现有Id值的列表?

1 个答案:

答案 0 :(得分:1)

评论太长了。

SQL Server(与任何数据库一样)具有相当复杂的数据页面设计。 Here是对更多细节的参考。

但是,这个想法是将NULL标志存储在与实际值分开的位图中。为了从数据页读取值,存储引擎必须解析NULL标志,而不管它做了什么。没有NULL标志,该值没有意义。

从这个角度来看,与值的任何比较都需要解析NULL标志和检索值。 (理论上)如果不需要该值,引擎只能获取NULL标志。

您的问题确实是:“SQL Server是否优化IS NULL比较仅从位图中获取NULL标志而不是其余值?”我不知道这个问题的答案。

但是,对于页面上的数据值,复制或不复制额外四个字节之间的差异实际上非常非常小。与页外存储有更重要的区别,因此可以优化那些

根据我对存储架构的了解,我最好的猜测是NULL值比较可以进行非常非常小的优化。我不知道是否确实存在差异。在任何情况下,额外的一两个周期可能都不会引起注意。