And*_*ber 4 index sql-server-2008 sql-server
我正在构建一个复合索引,但我不能 100% 确定以哪种方式包含作为bit表一部分的字段。该索引将用于类似于论坛主题列表的内容,我希望单个索引由ForumId(int), IsSticky(bit), then DatePosted (desc)(datetime2(0))
但我想确保IsSticky正确处理位域;我是否将其索引为trueis1或-1?如果它是 1,我会索引 IsSticky 降序;如果-1,我会索引它升序。
另外,我要求使用 SQL 2008,但我很想知道它在 2005 年是否有所不同。
Mar*_*ith 18
一个SQL服务器位字段可以是0,1或NULL,所以我不能确定您的问题的一部分-1功能。
跳过这一点,论坛数据库中“粘性线程”的最合适解决方案是使用单独的过滤索引。将粘性线程标记为IsSticky=1并按照以下方式创建过滤索引:
CREATE NONCLUSTERED INDEX IX_Posts_StickyThread
ON dbo.Posts (ForumId, PostId)
WHERE IsSticky = 1;
Run Code Online (Sandbox Code Playgroud)
过滤索引是 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)。
| 归档时间: |
|
| 查看次数: |
3445 次 |
| 最近记录: |