Estou apenas aprendendo sobre os novos índices filtrados no MS SQL 2008 e estou tentando entender onde eles prejudicariam e onde ajudariam.
Posso ver que adicionar um índice filtrado a uma tabela de funcionários para indexar apenas os funcionários atuais seria uma boa ideia.
Mas que tal aplicar alguns índices filtrados a uma tabela grande com base no tempo. Por exemplo, digamos que eu tenha uma tabela que tenha um campo de data/hora inserido e a tabela tenha muitos anos de dados. Se as consultas normalmente são feitas com base na data e em algum outro campo, como inserido por, seria bom ter alguns índices filtrados com uma cláusula where limitando o índice a um período de tempo? No meu exemplo, a consulta seria algo como
select enteredOn, Description, ...
from myTable
where enteredOn > '2011/01/01' and enteredBy = "My, User"
Ter um índice filtrado para cada ano seria razoável ou isso causaria muitos problemas quando o abaixo fosse consultado?
select enteredOn, Description, ...
from myTable
where enteredOn > '2009/06/01' and eneteredOn < '2010/06/01' and enteredBy = "My, User"
BitOff,
Depende de alguns fatores, não existe uma resposta para cada cenário. Por exemplo, você pode querer particionar e arquivar alguns dados antigos em um conjunto dedicado de discos porque eles são acessados com pouca frequência. Duvido que você considere trocar essa partição por um índice filtrado. E duvido que você queira criar uma partição para todos os valores de NULL em uma coluna específica em vez de usar um índice filtrado.
Você deve ler o white paper de particionamento de Kimberley Tripp em http://msdn.microsoft.com/en-us/library/ms345146%28v=sql.90%29.aspx e as diretrizes de design de índice filtrado encontradas em http:// technet.microsoft.com/en-us/library/cc280372.aspx .
Esses dois links devem ajudar a apontar a direção certa no que diz respeito a todas as considerações de design que você precisa levar em consideração.