Índices parciales

Utilice índices parciales para crear índices utilizando un subconjunto de los documentos de la base de datos. Se trata de una potente técnica de optimización cuando se utiliza correctamente: reduce el tamaño total de un índice, lo que agiliza las consultas y reduce los costes de almacenamiento de datos.

Creación de un índice parcial

IBM Cloudant Query da soporte a índices parciales mediante el campo partial_filter_selector. partial_filter_selector contiene una consulta estándar IBM Cloudant que se ejecuta en el momento del índice. Los documentos que no coinciden con el selector no se añaden al índice.

Consulte la siguiente consulta de ejemplo:

{
  "selector": {
    "status": {
      "$ne": "archived"
    },
    "type": "user"
  }
}

Sin un índice parcial, esta consulta requiere una exploración de índice completa para encontrar todos los documentos con el valor type:user que no están en un estado archived. Esta situación se produce porque se puede utilizar un índice normal para que coincida con filas contiguas y el operador $ne no lo puede garantizar.

Para mejorar el tiempo de respuesta, puede crear un índice que excluya los documentos con status: { $ne: archived } en el momento de crear el índice mediante partial_filter_selector que se muestra en el siguiente ejemplo:

POST /db/_index HTTP/1.1
Content-Type: application/json
Content-Length: 144
Host: localhost:5984

{
  "index": {
    "partial_filter_selector": {
      "status": {
        "$ne": "archived"
      }
    },
    "fields": ["type"]
  },
  "ddoc" : "type-not-archived",
  "type" : "json"
}

El planificador de consultas no utiliza los índices parciales a menos que se especifiquen mediante un campo mediante un campo use_index, por lo que debe modificar la consulta original:

{
  "selector": {
    "status": {
      "$ne": "archived"
    },
    "type": "user"
  },
  "use_index": "type-not-archived"
}

Técnicamente no es necesario incluir el filtro en el campo status en el selector de consulta. El índice parcial garantiza que este valor es siempre verdadero. Sin embargo, si incluye el filtro, se aclara la intención del selector. También facilita el aprovechamiento de futuras mejoras en la planificación de consultas (por ejemplo, selección automática de índices parciales).