Isso basicamente se resume a se 10 índices de tamanho N são mais eficientes do que um índice de tamanho N * 10. Se você olhar apenas para leituras, os índices separados sempre devem ser mais rápidos. As caminhadas da b-tree associadas examinarão um conjunto de chaves menor, etc.
Porém, há alguns pontos a serem considerados:
- Os índices em campos de array basicamente indexam cada elemento de array separadamente. Como tal, a sobrecarga de pesquisa será no máximo de 1 a 2 etapas adicionais durante a caminhada da árvore b, o que é um impacto insignificante no desempenho. Em outras palavras, eles serão quase tão rápidos.
- Ter 10 índices pode significar que cada atualização/inserção exigirá que mais de um índice seja atualizado (dependendo se seus índices compartilham um campo ou se você atualiza mais de 1 carimbo de data/hora por vez). Essa é uma consideração significativa de desempenho.
- O uso de um índice de matriz facilita um pouco a adição de carimbos de data/hora adicionais (por exemplo, Timestamp10).
- Há um limite para o número de namespaces que você pode usar por banco de dados (24k) e cada índice ocupa um. Se você criar um índice separado por campo, isso pode se tornar um problema.
- Mais importante, o índice de matriz é muito mais direto e simplificará seu código e, portanto, a manutenção. Dadas as diferenças de desempenho limitadas, eu diria que essa é a motivação mais forte para usar um índice de matriz aqui.