Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Indexes

En esta guía, puedes aprender cómo usar índices con el controlador C. Los índices pueden mejorar la eficiencia de las querys y agregar funcionalidades a la query y al almacenamiento de documentos.

Sin índices, MongoDB debe escanear todos los documentos de una colección para encontrar los que coinciden con cada consulta. Estos escaneos de colecciones son lentos y pueden afectar negativamente el rendimiento de la aplicación. Sin embargo, si existe un índice adecuado para una consulta, MongoDB puede usarlo para limitar los documentos que debe inspeccionar.

Para mejorar el rendimiento de las query, construir índices sobre los campos que aparecen con frecuencia en las query de tu aplicación y en las operaciones que devuelven resultados ordenados. Cada índice que añadas consume espacio en disco y memoria cuando está activo, por lo que te recomendamos que rastrees el uso de memoria y disco para la planificación de la capacidad. Además, cuando una operación de escritura actualiza un campo indexado, MongoDB actualiza el índice relacionado, lo que puede afectar negativamente el rendimiento de las operaciones de escritura.

Puede usar índices comodín en tu aplicación de MongoDB para consultar campos cuyos nombres no se conocen de antemano o son arbitrarios. Los índices comodín no están diseñados para reemplazar la planificación de índices basada en la carga de trabajo.

Para obtener más información sobre cómo diseñar tu modelo de datos y elegir los índices adecuados para tu aplicación, consulta la guía Modelado de datos e índices en el manual de MongoDB Server.

Los ejemplos de esta guía utilizan el movies y la theaters colección en la base de datos sample_mflix de los conjuntos de datos de ejemplo de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulte la guía de inicio de Atlas.

MongoDB admite varios tipos de índices para facilitar la consulta de datos. Las siguientes páginas describen los tipos de índice más comunes y ofrecen código de ejemplo para crear cada uno.

  • Índices de un solo campo

  • Índices compuestos

  • Multikey Indexes

  • Índices de búsqueda de MongoDB

Las siguientes secciones describen otros tipos comunes de índice y proporcionan código de muestra para crear cada tipo de índice.

El siguiente ejemplo crea un índice 2dsphere en el campo location.geo, que contiene objetos GeoJSON en la colección theaters:

bson_error_t error;
bson_t *keys = BCON_NEW("location.geo", BCON_UTF8("2dsphere"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para obtener más información sobre el tipo de datos GeoJSON, consulte Objetos GeoJSON en el manual de MongoDB Server.

El siguiente ejemplo crea un índice único ascendente en el campo title:

bson_error_t error;
bson_t *keys = BCON_NEW("title", BCON_INT32(1));
bson_t *opts = BCON_NEW("unique", BCON_BOOL(true));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, opts);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
bson_destroy(opts);
mongoc_index_model_destroy(index_model);

El siguiente ejemplo crea un índice comodín ascendente en la colección especificada:

bson_error_t error;
bson_t *keys = BCON_NEW("$**", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

El siguiente ejemplo crea una nueva colección con un índice clúster ascendente en el campo _id:

bson_error_t error;
bson_t *opts = BCON_NEW("clusteredIndex", "{",
"key", "{",
"_id", BCON_INT32(1),
"}",
"unique", BCON_BOOL(true),
"}");
mongoc_database_t *database = mongoc_client_get_database(client, "sample_mflix");
if (mongoc_database_create_collection(database, "clustered_collection", opts, &error)) {
printf("Successfully created collection\n");
} else {
fprintf(stderr, "Failed to create collection: %s", error.message);
}
mongoc_database_destroy(database);
bson_destroy(opts);

El siguiente ejemplo crea un índice de texto en el campo de cadena title:

bson_error_t error;
bson_t *keys = BCON_NEW("title", BCON_UTF8("text"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Puedes quitar cualquier índice no utilizado excepto el índice único predeterminado en el campo _id. Envía una estructura mongoc_collection_t, el nombre del índice y una estructura opcional bson_error_t a la función mongoc_collection_drop_index() para remover un índice de una colección.

El siguiente ejemplo elimina un índice con el nombre "_title_" de la colección movies:

bson_error_t error;
if (mongoc_collection_drop_index(collection, "_title_", &error)) {
printf("Successfully dropped index\n");
} else {
fprintf(stderr, "Failed to drop index: %s", error.message);
}

Nota

No puedes remover un solo campo de un índice de texto compuesto. Debes descartar el índice completo y crear uno nuevo para actualizar los campos indexados.

Para aprender más sobre alguna de las funciones tratadas en esta guía, consulta la siguiente documentación de la API:

Volver

Time Series

En esta página