Solo es relevante para la edición Enterprise de Cloud Firestore. |
En esta página, se describe la indexación para Cloud Firestore con compatibilidad con MongoDB. De forma predeterminada, Cloud Firestore con compatibilidad con MongoDB no crea ningún índice. Para mejorar el rendimiento de la base de datos, crea índices para las consultas que se usan con mayor frecuencia.
Los índices tienen un gran impacto en el rendimiento de una base de datos. Si existe un índice para una consulta, la base de datos puede devolver resultados de manera eficiente, ya que reduce la cantidad de datos que se deben analizar y el trabajo necesario para ordenar los resultados. Sin embargo, las entradas de índice aumentan los costos 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 los índices
Un índice consta de lo siguiente:
- ID de una colección
- una lista de los campos de la colección determinada
- un orden, ya sea ascendente o descendente, para cada campo
Un índice también puede habilitar las opciones sparse, multikey o unique.
Orden de los índices
El orden y la dirección de clasificación de cada campo definen de forma única el índice. Por ejemplo, los siguientes índices son distintos y no se pueden intercambiar:
Colección | Campos |
---|---|
cities | país (ascendente), población (descendente) |
cities | población (descendente), país (ascendente) |
Cuando crees un índice para admitir una consulta, incluye los campos en el mismo orden que en la consulta.
Densidad de indexación
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 agregará una entrada de índice para un documento, independientemente de si el documento contiene alguno de los campos especificados en el índice. Los campos no existentes se tratan como si tuvieran un valor NULL cuando se generan entradas de índice. Para cambiar este comportamiento, puedes definir el índice como un índice disperso.
Índices dispersos
En un índice disperso, solo se indexan los documentos de la colección que contienen un valor (incluido el nulo) para al menos uno de los campos indexados. Un índice disperso reduce los costos de almacenamiento y puede mejorar el rendimiento.
Índices de varias claves para valores de array
Si creas un índice en un campo que contiene valores de array, debes crear un índice de varias claves. Un índice normal no puede indexar valores de array. Un índice de varias claves admite hasta un campo de array en la definición del índice y se puede usar para operaciones que recorren valores de array.
Solo usa índices de varias claves si sabes que necesitas indexar valores de array. Los índices regulares tienen ventajas cuando se procesa una consulta. Por ejemplo, los índices regulares pueden filtrar valores dentro de un rango de manera más eficiente.
Las siguientes situaciones generan errores cuando se trabaja con valores de array y con índices de varias claves:
- Una operación intenta agregar un valor de array a un campo indexado por un índice regular. Para agregar el valor del array, debes borrar los índices regulares existentes 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. Debes crear un índice de varias claves o borrar los valores del array.
- Una operación intenta indexar varios campos con valores de array. No puedes tener más de un campo con un valor de array en un índice de varias claves. Para continuar, modifica tu modelo de datos o las definiciones de tu índice.
- Intentas crear un índice de varias claves en el que dos rutas de campo comparten un prefijo común, como
users.posts
yusers.zip
.
Índices únicos
Establece la opción de índice único para aplicar valores únicos a los campos indexados. En el caso de los índices en varios campos, cada combinación de valores debe ser única en todo el índice. La base de datos rechaza cualquier operación de actualización o inserción que intente crear entradas de índice con valores duplicados. Si los datos de los campos indexados contienen valores duplicados y se intenta crear un índice único, la compilación del índice falla y se muestra un mensaje de error en los detalles de la operación.
Campos ausentes en un índice único
Si insertas un documento con campos faltantes para el índice único, el índice establece valores de null
para los campos faltantes. 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 agregas el documento {"abbreviation": "LA"}
a la colección, el índice único crea una entrada con name
establecido en null
. Si luego intentas agregar el documento {"abbreviation": "NYC"}
, la operación falla porque la entrada resultante para el índice único es la misma.
El mismo comportamiento se aplica a los índices únicos con varios campos.
Cuando se crea o actualiza un documento, los campos indexados faltantes se establecen en null
y la entrada de índice resultante debe ser única en el índice.
Soluciona problemas de errores en la compilación de índices
Es posible que encuentres errores en la compilación de los índices cuando los administres. Una operación de indexación puede fallar si la base de datos encuentra un problema con los datos. Las operaciones de indexación pueden fallar por los siguientes motivos:
- Alcanzaste un límite de indexación. Por ejemplo, es posible que la operación haya alcanzado la cantidad máxima de entradas permitidas en un índice de un documento. Si falla la creación de los índices, aparecerá un mensaje de error. Si no alcanzaste un límite de índices, reintenta la operación de índices.
- Se requiere un índice de varias claves. Al menos uno de los campos indexados contiene un valor de array. Para continuar, debes usar un índice de varias claves o borrar los valores del array.
- Una operación intenta indexar varios campos con valores de array. No puedes tener más de un campo con un valor de array en un índice de varias claves. Para continuar, modifica tu modelo de datos o las definiciones de tu índice.
- Si estableces la opción de índice único, los datos de los campos indexados crearán entradas de índice duplicadas. Para continuar, quita las combinaciones duplicadas de valores de los datos.
¿Qué sigue?
- Obtén más información para crear y administrar índices