Estou construindo um índice composto e não tenho 100% de certeza de como incluir um bit
campo que faz parte da tabela. O índice será para algo semelhante a uma lista de tópicos do fórum, onde eu quero que o índice único seja por ForumId
(int), IsSticky
(bit), então DatePosted (desc)
(datetime2(0))
Mas quero ter certeza de que manipulo o IsSticky
campo de bits corretamente; Devo indexá-lo como se true
fosse 1
ou -1
? Se for 1, eu indexaria IsSticky descendente; se -1, eu o indexaria ascendente.
Além disso, estou pedindo SQL 2008, mas gostaria de saber se é diferente em 2005.
Um campo de bits do SQL Server pode ser 0, 1 ou NULL, portanto, não tenho certeza de onde a parte -1 da sua pergunta está presente.
Ignorando isso, a solução mais apropriada para "tópicos fixos" em um banco de dados de fórum é usar um índice filtrado separado . Sinalize um thread fixo como
IsSticky=1
e crie um índice filtrado ao longo das linhas de:Os índices filtrados eram novos no SQL2008, portanto, essa não seria uma opção para o SQL2005. O artigo SQLCat usando uma coluna BIT de baixa seletividade primeiro pode ser a melhor estratégia seria leitura aplicável para uma abordagem para isso em 2005 (editar: o artigo foi arquivado no eBook SQLCAT's Guide to Relational Engine ).
E apenas para abordar a questão do título, os campos de bits em um índice são ordenados da mesma forma que ORDER BY bit_field, ou seja, NULL, 0, 1 (crédito @MartinSmith).