Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2022-11-07 GMT+08:00

Optimización de Sentencias

DDS es inherentemente una base de datos NoSQL con alto rendimiento y fuerte extensibilidad. Al igual que las bases de datos relacionales, como MySQL, Microsoft SQL Server y Oracle, el rendimiento de las instancias DDS también puede verse afectado por el diseño de bases de datos, la optimización de sentencias y la creación de índices.

A continuación se proporcionan sugerencias para mejorar el rendimiento de DDS en diferentes dimensiones:

Creación de bases de datos y colecciones

  • Utilice nombres de campo cortos para ahorrar espacio de almacenamiento. A diferencia de una base de datos RDS, cada documento DDS tiene sus nombres de campo almacenados en la colección. Se recomienda un nombre corto.
  • Limite el número de documentos de una colección para evitar el impacto en el rendimiento de la consulta. Archivar documentos periódicamente si es necesario.
  • Cada documento tiene un _id predeterminado. No cambie el valor de este parámetro.
  • Las colecciones tapadas tienen una velocidad de inserción más rápida que otras colecciones y pueden eliminar automáticamente los datos antiguos. Puede crear colecciones con límites para mejorar el rendimiento en función de sus requisitos de servicio.

Operaciones de consulta

Indices

  • Cree el número adecuado de índices para los campos que se consultan con frecuencia en función de los requisitos de servicio. Los índices ocupan algo de espacio de almacenamiento y las operaciones de inserción e indexación consumen recursos. Se recomienda que el número de índices en cada colección no exceda de 5.
  • Si la consulta de datos es lenta debido a la falta de índices, cree índices adecuados para los campos consultados con frecuencia.
  • Para una consulta que contiene varias claves de fragmento, cree un índice compuesto que contenga estas claves. El orden de las claves de fragmento en un índice compuesto es importante. Un índice compuesto admite consultas que utilizan el prefijo más a la izquierda del índice, y la consulta solo es relevante para la secuencia de creación de índices.
  • Los índices TTL se pueden utilizar para filtrar y eliminar automáticamente documentos caducados. El índice para crear TTL debe ser de tipo date. Los índices TTL son índices de campo único.
  • Puede crear índices de campo en una colección. Sin embargo, si un gran número de documentos de la colección no contiene valores clave, se recomienda crear índices dispersos.
  • Al crear índices de texto, el campo se especifica como texto en lugar de 1 o -1. Cada colección tiene un solo índice de texto, pero puede indexar varios campos.

Uso de comandos

  • El método findOne devuelve el primer documento que cumple los criterios de consulta especificados de la colección según el orden natural. Para devolver varios documentos, utilice este método.
  • Si la consulta no requiere la devolución de todo el documento o solo se utiliza para determinar si existe el valor de clave, puede usar $project para limitar el campo devuelto, reduciendo el tráfico de red y el uso de memoria del cliente.
  • Además de las consultas de prefijo, las consultas de expresión regular tardan más en ejecutarse que con selectores, y los índices no se recomiendan.
  • Algunos operadores que contienen $ en la consulta pueden deteriorar el rendimiento del sistema. Los siguientes tipos de operadores no se recomiendan en los servicios. $or, $nin, $not, $ne, y $exists.
    Tabla 1 Descripción del operador

    Operador

    Descripción

    $or

    Los tiempos de las consultas dependen del número de condiciones. Se utiliza para consultar todos los documentos que cumplen las condiciones de consulta de la colección. Se recomienda utilizar $in en su lugar.

    $nin

    Coincide con la mayoría de los índices, y se realiza la exploración completa de la tabla.

    $not

    El optimizador de consultas puede no coincidir con un índice específico, y se realiza el análisis de la tabla completa.

    $ne

    Selecciona los documentos en los que el valor del campo no es igual al valor especificado. Se escanea todo el documento.

    $exists

    Coincide con cada documento que contiene el campo.

    Para obtener más información, consulte documentos oficiales de MongoDB.

Precauciones
  • Los índices no se pueden utilizar en los operadores $where y $exists.
  • Si es necesario ordenar los resultados de la consulta, controle el número de conjuntos de resultados.
  • Si hay varios índices de campo involucrados, coloque el campo utilizado para la coincidencia exacta antes del índice.
  • Si la secuencia de valores de clave en los criterios de búsqueda es diferente de la del índice compuesto, DDS cambia automáticamente la secuencia de consulta a la misma que la secuencia de índice.
    • Operación de modificación

      Modificar un documento mediante el uso de operadores puede mejorar el rendimiento. Este método no necesita obtener y modificar datos de documentos en el servidor, y toma menos tiempo para serializar y transferir datos.

    • Inserción por lotes

      La inserción por lotes puede reducir el número de veces que los datos se envían al servidor y mejorar el rendimiento. El tamaño del BSON de los datos enviados en lotes no puede superar los 48 MB.

    • Operación agregada

      Durante la agregación, $match debe colocarse antes que $group para reducir el número de documentos que procesará el operador $group.