Información general sobre los índices

En esta página se describe la indexación de Firestore con compatibilidad con MongoDB. Firestore con compatibilidad con MongoDB no crea ningún índice de forma predeterminada. Para mejorar el rendimiento de la base de datos, crea índices para las consultas que uses con más frecuencia.

Los índices influyen mucho en el rendimiento de una base de datos. Si existe un índice para una consulta, la base de datos puede devolver resultados de forma eficiente reduciendo la cantidad de datos que se deben analizar y el trabajo necesario para ordenar los resultados. Sin embargo, las entradas de índice aumentan los costes de almacenamiento y la cantidad de trabajo que se realiza durante una operación de escritura en los campos indexados.

Definición y estructura de índices

Un índice consta de lo siguiente:

  • un ID de colección
  • Una lista de los campos de la colección dada
  • Un orden, ya sea ascendente o descendente, para cada campo

Un índice también puede habilitar las opciones disperso, multiclave o único.

Orden de los índices

El orden y la dirección de ordenación de cada campo definen el índice de forma exclusiva. Por ejemplo, los siguientes índices son dos índices distintos y no se pueden intercambiar:

Colección Campos
cities País (ascendente), población (descendente)
cities población (de mayor a menor) y país (de menor a mayor).

Cuando crees un índice para admitir una consulta, incluye los campos en el mismo orden que en la consulta.

Densidad de índice

De forma predeterminada, las entradas de índice almacenan datos de todos los documentos de una colección. Esto se conoce como índice no disperso. Se añadirá una entrada de índice a un documento independientemente de si el documento contiene alguno de los campos especificados en el índice. Los campos que no existen se tratan como si tuvieran un valor NULL al generar entradas de índice. Para cambiar este comportamiento, puede definir el índice como índice disperso.

Índices dispersos

Un índice disperso solo indexa los documentos de la colección que contienen un valor (incluido el valor nulo) en al menos uno de los campos indexados. Un índice disperso reduce los costes de almacenamiento y puede mejorar el rendimiento.

Índices de varias claves para valores de matriz

Si va a crear un índice en un campo que contiene valores de matriz, debe crear un índice de varias claves. Un índice normal no puede indexar valores de matriz. Un índice de varias claves admite hasta un campo de matriz en la definición del índice y se puede usar en operaciones que recorran valores de matriz.

Utiliza índices de varias claves solo si sabes que necesitas indexar valores de array. Los índices normales tienen ventajas a la hora de procesar una consulta. Por ejemplo, los índices normales pueden filtrar valores dentro de un intervalo de forma más eficiente.

En las siguientes situaciones se producen errores al trabajar con valores de matriz e índices de varias claves:

  • Una operación intenta añadir un valor de matriz a un campo indexado por un índice normal. Para añadir el valor de la matriz, debe eliminar los índices normales que ya haya en ese campo y volver a crearlos como índices de varias claves.
  • Intentas crear un índice normal en un campo que contiene un valor de array. Debe crear un índice de varias claves o eliminar los valores de la matriz.
  • Una operación intenta indexar varios campos con valores de matriz. No puedes tener más de un campo con un valor de array en un índice de varias claves. Para continuar, modifique su modelo de datos o sus definiciones de índice.
  • Intentas crear un índice de varias claves en el que dos rutas de campo comparten un prefijo común, como users.posts y users.zip.

Índices únicos

Selecciona la opción de índice único para aplicar valores únicos a los campos indexados. En el caso de los índices de varios campos, cada combinación de valores debe ser única en el índice. La base de datos rechaza cualquier operación de actualización e inserción que intente crear entradas de índice con valores duplicados. Si los datos de los campos indexados contienen valores duplicados e intentas crear un índice único, la compilación del índice fallará y se mostrará un mensaje de error en los detalles de la operación.

Campos que faltan en un índice único

Si insertas un documento al que le faltan campos del índice único, el índice establece valores null para los campos que faltan. La entrada de índice resultante debe ser única o la operación fallará.

Por ejemplo, con este índice:

db.cities.createIndex( { "name": 1 }, { unique: true } )

Si añades el documento {"abbreviation": "LA"} a la colección, el índice único crea una entrada con name definido como null. Si intentas añadir el documento {"abbreviation": "NYC"}, la operación fallará porque la entrada resultante del índice único es la misma.

El mismo comportamiento se aplica a los índices únicos con varios campos. Al crear o actualizar un documento, los campos indexados que faltan se definen como null y la entrada de índice resultante debe ser única en el índice.

Solucionar errores de creación de índices

Es posible que se produzcan errores al crear índices cuando gestiones tus índices. Una operación de indexación puede fallar si la base de datos tiene un problema con los datos. Las operaciones de indexación pueden fallar por los siguientes motivos:

  • Has alcanzado un límite de índice. Por ejemplo, es posible que la operación haya alcanzado el número máximo de entradas de índice por documento. Si no se puede crear el índice, verás un mensaje de error. Si no has alcanzado un límite de índice, vuelve a intentar la operación de indexación.
  • Es obligatorio indicar un índice de varias claves. Al menos uno de los campos indexados contiene un valor de matriz. Para continuar, debes usar un índice de varias claves o eliminar los valores de la matriz.
  • Una operación intenta indexar varios campos con valores de matriz. No puedes tener más de un campo con un valor de array en un índice de varias claves. Para continuar, modifique su modelo de datos o sus definiciones de índice.
  • Si define la opción de índice único, los datos de los campos indexados crearán entradas de índice duplicadas. Para continuar, elimine las combinaciones de valores duplicadas de los datos.

Siguientes pasos