Uma tabela de muitos para muitos deve ser indexada? Que tipo de índice seria melhor?
Aqui está uma tabela de exemplo:
CREATE TABLE user_role (
userId INT,
roleId INT
)
--edit: drachenstern - I added the table def based on the original comments, and assumed ints.
Você não precisa de uma chave substituta (a menos que use um ORM inteligente) e quase sempre precisa do segundo índice
No SQL Server, os índices não clusterizados incluem a chave de clustering, portanto, eu ofereceria a seguinte solução alternativa com base na solução anterior oferecida:
Isso pressupõe que o ID do usuário seria o candidato de pesquisa/varredura mais provável.
Se uma consulta for executada com uma condição de filtro com base no ID do usuário, o índice clusterizado atenderá às necessidades; se uma consulta for executada com uma condição de filtro baseada em roleid, o índice não clusterizado cobrirá a consulta; se uma consulta usar roleid e userid para filtrar, o índice clusterizado cobrirá a consulta.
Consulte as informações do artigo a seguir sobre como a chave de clustering é incluída em índices não clusterizados:
http://www.simple-talk.com/sql/learn-sql-server/effective-clustered-indexes/
Obrigado, Jeff