我正在构建一个复合索引,但我不能 100% 确定以哪种方式包含作为bit
表的一部分的字段。该索引将用于类似于论坛主题列表的内容,我希望单个索引为ForumId
(int),IsSticky
(bit),然后是DatePosted (desc)
(datetime2(0))
但我想确保IsSticky
正确处理位域;我是否像true
is1
或那样索引它-1
?如果是 1,我会索引 IsSticky 降序;如果为-1,我会将其索引为升序。
另外,我要的是 SQL 2008,但我很想知道它在 2005 年是否有所不同。
SQL Server 位字段可以是 0、1 或 NULL,所以我不确定您的问题的 -1 部分在哪里。
跳过这一点,论坛数据库中“粘滞线程”的最合适解决方案是使用单独的过滤索引。将粘性线程标记为
IsSticky=1
并创建过滤索引,如下所示:过滤索引是 SQL2008 的新功能,因此这不是 SQL2005 的选项。SQLCat 文章Using a Low-Selectivity BIT Column First Can Be the Best Strategy将适用于 2005 年的方法阅读(编辑:文章已归档到电子书SQLCAT 的关系引擎指南)。
并且只是为了解决索引中的标题问题位字段的顺序与 ORDER BY bit_field 相同,即 NULL、0、1(信用 @MartinSmith)。