Avaliar índices compostos

Concluído

Não é incomum ter uma classificação de consulta ou um filtro em várias propriedades. Nesses cenários, personalizar a política de indexação de pequenas maneiras poderia colher benefícios no desempenho dessas consultas.

Por exemplo, se você estiver escrevendo consultas SQL que filtram várias propriedades simultaneamente, poderá se beneficiar de um tipo específico de índice chamado índice composto, que combina dois caminhos em uma ordem específica.

Vamos examinar uma consulta de exemplo:

SELECT * FROM products p WHERE p.name = "Road Saddle" AND p.price > 50

Essa consulta inclui dois filtros:

  • Um filtro de igualdade que verifica o valor da propriedade name quanto à equivalência à cadeia de caracteres Road Saddle.

  • Um filtro de intervalo que verifica se o valor da propriedade price é maior que o número 50.

Se a consulta for capaz de usar um índice composto, isso incluirá as propriedades name e price. Esse índice composto pode ser:

  • (name ASC, price ASC)

  • (name DESC, price ASC)

Observação

Nesse exemplo, o filtro de intervalo apareceu por último. Essa é uma melhor prática para consultas com vários filtros que aproveitam um índice composto.

Aprofundando-se ainda mais, as consultas que ordenam os resultados usando várias propriedades devem incluir um índice composto.

Vejamos outro exemplo de consulta:

SELECT * FROM products p ORDER BY p.price ASC, p.name ASC

O índice composto que dará suporte a essa consulta deve corresponder exatamente à sequência das propriedades na cláusula ORDER BY. Um índice composto de (name ASC, price ASC) não funcionaria nesse exemplo. Índices compostos como esses funcionarão neste cenário:

  • (price ASC, name ASC)

  • (price DESC, name DESC)

Dica

Você também pode usar índices compostos com consultas que têm permutações diferentes de filtros e cláusulas order by.

Para criar uma política de indexação JSON bruta com um índice composto, você deve incluir a propriedade de matriz compositeIndexes opcional. Essa matriz externa consiste em uma série de matrizes internas para cada definição de índice composto.

Por exemplo, para criar um índice composto de (name ASC, price DESC), você pode definir um objeto JSON com esta estrutura:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/_etag/?"
    }
  ],
  "compositeIndexes": [
    [
      {
        "path": "/name",
        "order": "ascending"
      },
      {
        "path": "/price",
        "order": "descending"
      }
    ]
  ]
}

Dica

Lembre-se de que você pode definir vários índices compostos na política de indexação para várias consultas importantes que os aplicativos exigem.